我刚刚开始使用ReactJS,所以我仍然掌握它。我需要一个方面的帮助,但是我没有找到答案。我试图从子组件中调用父组件中的函数,但我也想从父组件中接收包含一些数据的答案。我该如何实现? 目前我正在做的是:
import Parent from './parent.js';
class Child extends React.Component {
constructor(props) {
super(props);
};
click = () => {
this.props.parentMethod();
}
render() {
<div onClick={this.click}>Hello Child</div>
}
}
class Parent extends React.Component {
constructor(props) {
super(props);
};
someMethod() {
console.log('bar');
}
render() {
<Child parentMethod={this.someMethod}>Hello Parent, {this.props.children}</Child>
}
}
答案 0 :(得分:1)
您通常不会这样做。数据来自React中的父»子流。因此,如果在Parent
上执行函数更改了传递给Child
的数据,则您的Child
组件将重新呈现。
使用您的示例:
class Child extends React.Component {
render() {
<div onClick={this.props.changeName}>
Hello, {this.props.displayName}
</div>
}
}
class Parent extends React.Component {
constructor(){
this.state = {
name: "Bob",
}
}
changeName = () => {
this.setState({ name: "Sally" })
}
render() {
return(
<Child
changeName={this.changeName}
displayName={this.state.name}
/>
)
}
}
在此情况下,单击div
内的Child
将更改name
的{{1}}的{{1}}属性,然后将其传递给{ {1}},然后重新渲染。
答案 1 :(得分:1)
您可以将数据保留在父组件的状态下,并将其传递给子组件。调用函数后,该数据在父级中更改,然后再次返回子级。顺便说一下,您在return
方法中缺少了render
个。寻找它。
const Child = ( props ) => {
const click = () => {
props.parentMethod();
}
return (
<div onClick={click}>
Hello, this is Child.
Data is now: {!props.data ? "No data yet!" : props.data }
</div>
);
}
class Parent extends React.Component {
state = {
data: "",
}
someMethod = () =>
this.setState({ data: "bar"});
render() {
return (
<Child data={this.state.data} parentMethod={this.someMethod} />
);
}
}
ReactDOM.render(<Parent />, document.getElementById("root"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>