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

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

如何在 React.JS 中將狀態(tài)從子組件傳遞給父組件?

如何在 React.JS 中將狀態(tài)從子組件傳遞給父組件?

桃花長相依 2021-06-22 16:08:44
我有一個包含 10 多個輸入字段的表單,用于更新類的狀態(tài)。為了讓事情看起來更干凈,我將所有帶有標(biāo)簽的輸入字段移動到一個單獨的組件中,以便我可以為每個輸入重新使用它。該組件采用 2 個參數(shù),作為我主類中的子組件。子組件:    const Input = ({ name, placeholder }) => {      return (        <div className="wrapper">          <Row className="at_centre">            <Col sm="2" style={{ marginTop: "0.5%" }}><Form.Label>{ name }</Form.Label></Col>            <Col sm="5"><Form.Control placeholder={ placeholder }/></Col>          </Row>        </div>      )    }家長:    state = { name: '', description: '' }    handleSubmit = (e) => {        e.preventDefault()        console.log(this.state);    }    render(){        return(            <Form style={{ marginBottom: "5%", padding: 10 }} onSubmit={ this.handleSubmit } >                <Input name="Name: " placeholder="How is it called?" onChange={ (event) => this.setState({name: event.target.value}) }/>                <Input name="Description: " placeholder="Please describe how does it look like?" onChange={ (event) => this.setState({description: event.target.value}) }/>                <Button variant="outline-success" size="lg" type="submit" >SUBMIT</Button>            </Form>                    )    }在我這樣做之后,我找不到如何在更改文本時從我的子組件更新狀態(tài)的方法。我這樣做的所有嘗試要么使網(wǎng)站崩潰,要么什么也沒做。我還是 React.js 的新手,所以任何反饋都值得贊賞。
查看完整描述

3 回答

?
一只名叫tom的貓

TA貢獻(xiàn)1906條經(jīng)驗 獲得超3個贊

將onChange事件傳遞給您的子組件并將其與Form.Control控件連接。


您的Input組件將是,


const Input = ({ name, placeholder, onChange }) => {

  return (

    <div className="wrapper">

      <Row className="at_centre">

        <Col sm="2" style={{ marginTop: "0.5%" }}>

          <Form.Label>{name}</Form.Label>

        </Col>

        <Col sm="5">

          <Form.Control onChange={onChange} placeholder={placeholder} />

        </Col>

      </Row>

    </div>

  );

};

你的Parent組件是,


class Parent extends React.Component {

  state = { name: "", description: "" };


  handleSubmit = e => {

    e.preventDefault();

    console.log(this.state);

  };


  render() {

    return (

      <Form

        style={{ marginBottom: "5%", padding: 10 }}

        onSubmit={this.handleSubmit}

      >

        <Input

          name="Name: "

          placeholder="How is it called?"

          onChange={event => this.setState({ name: event.target.value })}

        />

        <Input

          name="Description: "

          placeholder="Please describe how does it look like?"

          onChange={event => this.setState({ description: event.target.value })}

        />


        <Button variant="outline-success" size="lg" type="submit">

          SUBMIT

        </Button>

      </Form>

    );

  }

}

工作 Codesandbox在這里


查看完整回答
反對 回復(fù) 2021-06-24
?
拉莫斯之舞

TA貢獻(xiàn)1820條經(jīng)驗 獲得超10個贊

您必須構(gòu)建所謂的受控組件。


const Input = ({ label, name, onChange, placeholder }) => (

        <div className="wrapper">

          <Row className="at_centre">

            <Col sm="2" style={{ marginTop: "0.5%" }}>

              <Form.Label>{ label }</Form.Label></Col>

            <Col sm="5">

              <Form.Control name={ name }

                            value={ value } 

                            placeholder={ placeholder }

                            onChange={ onChange }

               />

            </Col>

          </Row>

        </div>

      )

在你的父母那里,


state = { name: '', description: '' }


handleChange = ({ target: { name, value } }) => this.setState({ [name]: value })


render() {

 const { name, description } = this.state

  <Form style={{ marginBottom: "5%", padding: 10 }} onSubmit={ this.handleSubmit } >

    <Input label="Name: " name="name" value={name} onChange={handleChange}/>

    <Input label="Description: " description="description" value={description} onChange={handleChange}/>

    <Button variant="outline-success" size="lg" type="submit" >SUBMIT</Button>

  </Form>      

}

建議


盡量避免在渲染函數(shù)內(nèi)部制造 lambda 方法,并有一個類屬性作為 lambda 方法,這樣就不需要在每個渲染周期都制造 lambda。


查看完整回答
反對 回復(fù) 2021-06-24
  • 3 回答
  • 0 關(guān)注
  • 207 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號