第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

React - 映射數組未將道具正確傳遞給子組件

React - 映射數組未將道具正確傳遞給子組件

UYOU 2021-11-12 15:50:05
我正在制作一個儀表板組件,用于顯示 HTML 片段的渲染預覽和代碼。在儀表板組件內部,我使用.map. 每個映射的片段都將有一個刪除函數(已經構建)和一個更新函數。為了使更新功能正常工作,每個片段都有自己的子模態(tài)組件。我需要將代碼段的 ID 傳遞給模態(tài)組件,在那里我可以在更新數據庫和狀態(tài)之前將 ID 與新內容結合起來。但是,當我將 ID 作為道具傳遞給模態(tài)時,我在某處犯了一個錯誤。.map 在我的 Dashboard.js Dashboard 類組件中使用。{this.state.snippets.map(snippet => (  <>    <div key={snippet._id} className="holder--pod">      <div className="content">        <div className="content__snippet-preview">          Snippet preview        </div>        <div className="content__body">          <h4>{snippet.name}</h4>          <p>{snippet.details}</p>          <p>{snippet._id}</p> //THIS WORKS          <pre>            <code>{snippet.content}</code>          </pre>        </div>        <div className="content__button">          <button onClick={this.handleDelete(snippet._id)}>            Delete          </button>          <button type="button" onClick={this.showModal}>            Open          </button>        </div>      </div>    </div>    <Modal      sid={snippet._id} //PASS ID HERE      show={this.state.show}      handleClose={this.hideModal}    ></Modal>  </>))}這將呈現下面的片段(3 個片段 pod,包括它們的數據庫 ID)。
查看完整描述

3 回答

?
慕娘9325324

TA貢獻1783條經驗 獲得超4個贊

以下解決方案由 HMR 在評論中發(fā)起。


問題是所有模態(tài)都顯示出來,只有最后一個可見。通過將模態(tài)移出狀態(tài)并從狀態(tài)中.map更新 ID.map并將狀態(tài) ID 傳遞給模態(tài)內的新嵌套組件來修復。


還切換到使用動態(tài) CSS 來顯示和隱藏基于狀態(tài)的模式。


儀表板.jsx

export default class Snippets extends Component {

  constructor(props) {

    super(props)

    this.showModal = React.createRef()

    this.state = {

      snippets: [],

      show: false,

      sid: '',

    }

  }


  handleDelete = id => event => {

    event.preventDefault()

    api

      .deleteSnippet(id)

      .then(result => {

        console.log('DATA DELETED')

        api.getSnippets().then(result => {

          this.setState({ snippets: result })

          console.log('CLIENT UPDATED')

        })

      })

      .catch(err => this.setState({ message: err.toString() }))

  }

  handleModal = id => {

    this.setState({ sid: id })

    this.showModal.current.showModal()

  }

  //<div id="preview">{ReactHtmlParser(snippet.content)}</div>


  render() {

    return (

      <>

        <Modal ref={this.showModal} handleClose={this.hideModal}>

          <ModalUpdate sid={this.state.sid} />

        </Modal>

        <div className="Dashboard">

          <div className="wrapper">

            <div className="container">

              <div className="holder">

                <div className="content">

                  <div className="content__body">

                    <h3>Dashboard</h3>

                  </div>

                </div>

              </div>

              <div className="break"></div>

              {this.state.snippets.map(snippet => (

                <div key={snippet._id} className="holder--pod">

                  <div className="content">

                    <div className="content__snippet-preview">

                      Snippet preview

                    </div>

                    <div className="content__body">

                      <h4>{snippet.name}</h4>

                      <p>{snippet.details}</p>

                      <p>{snippet._id}</p>

                      <pre>

                        <code>{snippet.content}</code>

                      </pre>

                    </div>

                    <div className="content__button">

                      <button onClick={this.handleDelete(snippet._id)}>

                        Delete

                      </button>

                      <button

                        type="button"

                        onClick={() => this.handleModal(snippet._id)}

                      >

                        Open

                      </button>

                    </div>

                  </div>

                </div>

              ))}

            </div>

          </div>

        </div>

      </>

    )

  }



Modal.jsx

import React, { Component } from 'react'


export default class Modal extends Component {

  constructor(props) {

    super(props)

    this.state = {

      show: false,

    }

  }

  showModal = () => {

    this.setState({ show: true })

  }

  hideModal = () => {

    this.setState({ show: false })

  }


  render() {

    return (

      <div

        id="Modal"

        style={{ display: this.state.show === true ? 'flex' : 'none' }}

      >

        <div id="modal-main">

          <h4>Edit snippet </h4>

          {this.props.children}

          <button onClick={() => this.hideModal()}>Close</button>

        </div>

      </div>

    )

  }

}



ModalUpdate.jsx

import React, { Component } from 'react'


export default class ModalUpdate extends Component {

  constructor(props) {

    super(props)

    this.state = {

      name: '',

      details: '',

      content: '',

      message: null,

    }

  }

  // handleInputChange = event => {

  //   this.setState({

  //     [event.target.name]: event.target.value,

  //   })

  // }

  // handleClick = id => event => {

  //   event.preventDefault()

  //   console.log(id)

  // }


  render() {

    return <h4>ID = {this.props.sid}</h4>

  }

}


查看完整回答
反對 回復 2021-11-12
?
滄海一幻覺

TA貢獻1824條經驗 獲得超5個贊

我不確定 handleDelete 函數。但更換線路應該可以解決問題

<button onClick={() => this.handleDelete(snippet._id)}>


查看完整回答
反對 回復 2021-11-12
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

一個潛在的問題是this.handleDelete(snippet._id)will 立即觸發(fā)而不是onClick,因此您需要在事件偵聽器中添加一個匿名函數:

() => this.handleDelete(snippet._id)

代替

this.handleDelete(snippet._id)


查看完整回答
反對 回復 2021-11-12
  • 3 回答
  • 0 關注
  • 178 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號