亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

如何將組件的狀態傳遞給父級?

如何將組件的狀態傳遞給父級?

素胚勾勒不出你 2021-06-18 05:12:57
我正在使用 FormContainer 組件,它從父級接收初始值(基本上是空字符串,表示輸入值)和 handleSubmit 函數。FormContainer 有包含輸入值的狀態,用于更新狀態的 onChange 方法,onSubmit 方法。我正在使用反應上下文將 onChange 傳遞給輸入,并將 onSubmit 傳遞給提交按鈕。表單容器代碼:export const FormContext = React.createContext(null);class FormContainer extends Component {  constructor(props) {  super(props);  this.state = props.initialValue;}onChange(name, value) {  this.setState({ [name]: value });}onSubmit(){  const stateKostul = this.state;  console.log(stateKostul);  this.props.handleSubmit(stateKostul);}render() {  const value={    formState: this.state,    onChange: (name, value) => this.onChange(name, value),    onSubmit: () =>this.onSubmit(),  };  return (    <FormContext.Provider value={value}>      {this.props.children}    </FormContext.Provider>  );  }}我在 AddProductForm 組件/場景中使用它。我還使用 recompose 添加處理程序來獲取數據。添加產品表單代碼:function AddProductForm({ handleSubmit }) {  const initialValue = {    title: '',    location: '',    description: '',    photos: [],    price: '',  };  return (    <div className={s.container}>      <h2 className={s.formTitle}>Add product</h2>      <div className={s.formContainer}>        <FormContainer          initialValue={initialValue}         handleSubmit={handleSubmit}        >           // custom inputs and submit button        </FormContainer>      </div>    </div>  );}const enhancer = compose(  withHandlers({    handleSubmit: ({stateKostul}) => () => {      console.log('it works!');      console.log(stateKostul);      //fetch to server    },  }),);export default enhancer(AddProductForm);所以我的問題是我不知道如何將數據從 FormContainer 的狀態傳遞到 AddProductForm。當我將 FormContainer 的狀態從 props 傳遞給我的處理程序時,我得到了 undefind。但是從 onSubmit 狀態就可以了。而且我無法從 FormContainer 獲取數據,因為 FormContainer 背后的想法:它應該對任何形式都是通用的。任何想法如何在不改變其結構的情況下從 FormContainer 獲取數據?
查看完整描述

2 回答

?
弒天下

TA貢獻1818條經驗 獲得超8個贊

我不熟悉 FormContext/Enhancer,但是我認為您的錯誤在于您的增強器。您正在解構從 onSubmit 處理程序返回的對象,以尋找屬性“stateKostul”?!皊tateKostul”可能未在 FormContainer 的狀態中定義。這只是您傳遞給它的變量的名稱。


嘗試改變:


handleSubmit: ({stateKostul}) => () => {

      console.log('it works!');

      console.log(stateKostul);

      //fetch to server

}

至:


handleSubmit: (stateKostul) => () => {

      console.log('it works!');

      console.log(stateKostul);

      //fetch to server

}


查看完整回答
反對 回復 2021-06-24
?
Helenr

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

我將 AddProductForm 從功能組件更改為類組件并添加了方法 handleSubmit。猜猜問題出在上下文上。不確定如何,但現在有效


這是我的代碼:


class AddProductForm extends React.Component{

  constructor(props){

    super(props);

    this.state = {

      title: '',

      location: '',

      description: '',

      photos: [],

      price: '',

    };

    this.handleSubmit = this.handleSubmit.bind(this);

  }


  handleSubmit(stateKostul) {

    console.log('it works!');

    console.log(stateKostul);

    //fetch to server

  }



  render() {

    return (

      <div className={s.container}>

        <h2 className={s.formTitle}>Add product</h2>

        <div className={s.formContainer}>

          <FormContainer initialValue={this.state} handleSubmit={this.handleSubmit}>

            // custom inputs and submit button

          </FormContainer>

        </div>

      </div>


    );

  }

}


查看完整回答
反對 回復 2021-06-24
  • 2 回答
  • 0 關注
  • 156 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

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

公眾號

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