64

我有一个带有提交按钮的表单。该表单调用一个函数 onclick 将某物的状态从 false 设置为 true。然后我想将此状态传递回父级,以便如果它为真则呈现componentA,但如果为假则呈现componentB。

我会怎么做?我知道我需要使用状态或道具,但不知道该怎么做。这也与单向流反应原理相矛盾吗?

组件A代码:

<form onSubmit={this.handleClick}>


handleClick(event) {
    this.setState({ decisionPage: true });
    event.preventDefault();
  };

控制其显示内容的父组件:

return (
      <div>
      {this.props.decisionPage ?
        <div>
          <LoginPage />
        </div>
        :
        <div>
          <Decision showThanks={this.props.showThanks}/>
        </div>
      }
      </div>
    )
4

8 回答 8

64

移动handleClick到父组件并将其作为道具传递给子组件。

<LoginPage handleClick={this.handleClick.bind(this)}/>

现在在子组件中:

<form onSubmit={this.props.handleClick}>

这种方式提交表单将直接更新父组件中的状态。这假设您不需要访问子组件中更新的状态值。如果这样做,那么您可以将状态值作为道具从父级传回给子级。保持单向数据流。

<LoginPage  handleClick={this.handleClick.bind(this)} decisionPage={this.state.decisionPage}/>
于 2016-11-21T14:26:06.523 回答
9

在父组件中:

getDatafromChild(val){
    console.log(val);
}
render(){
 return(<Child sendData={this.getDatafromChild}/>);
}

在子组件中:

callBackMethod(){
   this.props.sendData(value);
 }
于 2020-07-18T12:32:01.793 回答
6

简单的步骤:

  1. 创建一个名为 Parent 的组件。
  2. 在父组件中创建一个接受一些数据并将接受的数据设置为父级状态的方法。
  3. 创建一个名为 Child 的组件。
  4. 将在 Parent 中创建的方法传递给子作为props.

  5. this.props使用后跟方法名称接受父项中的道具,并将子项的状态作为参数传递给它。

  6. 该方法将用孩子的状态替换父母的状态。
于 2019-02-25T12:56:37.907 回答
5

这是我们如何将数据从孩子传递给父母的示例(我遇到了同样的问题并使用了这个)

在父母身上,我有一个函数(我将从一个孩子那里调用它并为其提供一些数据)

handleEdit(event, id){ //Fuction
    event.preventDefault();  
    this.setState({ displayModal: true , responseMessage:'', resId:id, mode:'edit'});  
 } 

dishData = <DishListHtml list={products} onDelete={this.handleDelete} onEdit={(event, id) => this.handleEdit(event, id)}/>;

在子组件:

<div to="#editItemDetails" data-toggle="modal" onClick={(event)=>this.props.onEdit(event, listElement.id) }
                        className="btn btn-success">
于 2018-10-22T10:26:58.307 回答
5

将状态作为道具传递

我最近学习了一种方法,该方法非常适合<Parent /><Child />组件更改组件中的状态。

这可能不是这个问题的确切答案,但它肯定适用于这种情况和其他类似情况。

它是这样工作的:

STATE在组件中设置默认值<Parent />- 然后将“setState”属性添加到<Child />

const Parent = () => {
  const [value, setValue] = useState(" Default Value ");
   return (
    <Child setValue={setValue} />
  )
}

Child然后从组件更改状态(在父级中)

const Child = props => {
  return (
   <button onClick={() => props.setValue(" My NEW Value ")}>
    Click to change the state
  </button>
 )
}

当您单击按钮时,组件中的状态<Parent />将更改为您set<Child />组件中的状态,使用“道具”..这可以是您想要的任何东西。

我希望这对您和其他开发人员将来有所帮助。

于 2021-04-14T00:36:42.673 回答
2

在 React 中,您可以使用 props 将数据从父级传递给子级。但是您需要一种不同的机制来将数据从子级传递给父级。

另一种方法是创建一个回调方法。您在创建子项时将回调方法传递给子项。

class Parent extends React.Component {
myCallback = (dataFromChild) => {
    //use dataFromChild
},
render() {
    return (
        <div>
             <ComponentA callbackFromParent={this.myCallback}/>
        </div>
    );
  }
}

您通过父级传递的回调方法将决策页值从子级传递给父级。

     class ComponentA extends React.Component{
          someFn = () => {
            this.props.callbackFromParent(decisionPage);
          },
          render() {
            [...]
          }
     };

SomeFn 可能是您的 handleClick 方法。

于 2019-08-21T06:08:16.763 回答
0

如果您的父组件是功能组件,您现在可以使用使用上下文方式。这涉及将 ref 传递给对象并将 ref 传递给 stateChanging 方法。这将允许您做的是从父状态更改子状态,并在保持与父状态同步的同时引用状态。您可以在 codedamn 的 youtubeVideo 中了解更多相关信息,标题为“React 16.12 Tutorial 20: Intro to Context API”和“React 16.12 Tutorial 21: useContext”

于 2020-04-28T19:59:48.620 回答
0

这正是我想要的。但是,如果数据集包含 50 条记录,其中 (customer_id, customer_name) 作为要从子级更新到父级的值,那么这会滞后。在子组件中使用 React.useEffect 执行 setState

于 2022-01-07T09:41:14.607 回答