setState 函数不适用于子组件
setState function not working on child component
我的 React 组件中有以下代码:
class TheComponent extends Component{
constructor(props) {
super(props);
this.state = {
a: '',
b: ''
};
}
output = (data) => {
this.setState({
a: data.a,
b: data.b
});
}
render(){
return(<ChildrenComponent outputValues={this.output.bind(this)}/>);
}
}
当我从同一组件调用 output
方法时,它工作得很好,并且状态已成功更改。但是当我从我的 ChildrenComponent
调用它时它不起作用,并且状态永远不会改变。
因此,我将以下代码添加到 output
函数中,以了解发生了什么:console.log(this.setState)
。结果是 "setState" 函数 在那里 .
那么,如果函数 setState
正确绑定到 output
,为什么它不起作用?为什么它 仅在从当前组件调用输出时才起作用?`
我觉得你的代码很不错。我认为您只是对 setState
的作用有点困惑。 setState
是一个内置的 React 函数,因此 运行 console.log(this.setState)
将始终记录一个函数,特别是那个函数。
我不确定你是如何在子组件中调用你的 prop 的,但下面的例子允许子组件将父级状态设置为 render
函数上方的 data
对象return
以及将父状态记录到控制台。
class TheComponent extends Component{
constructor(props) {
super(props);
this.state = {
a: '',
b: ''
};
}
setValues = (data) => {
this.setState({
a: data.a,
b: data.b
});
}
outputValues = () => {
console.log(this.state);
}
render(){
return (
<ChildrenComponent set={this.setValues} output={this.outputValues}/>
<p>{this.state.a}</p>
);
}
}
class ChildrenComponent extends Component{
render() {
const data = { a: 'foo', b: 'bar' };
return (
<button onClick={() => this.props.set(data)}>change parent state</button>
<button onClick={this.props.outputValues}>console.log parent state</button>
);
}
}
我的 React 组件中有以下代码:
class TheComponent extends Component{
constructor(props) {
super(props);
this.state = {
a: '',
b: ''
};
}
output = (data) => {
this.setState({
a: data.a,
b: data.b
});
}
render(){
return(<ChildrenComponent outputValues={this.output.bind(this)}/>);
}
}
当我从同一组件调用 output
方法时,它工作得很好,并且状态已成功更改。但是当我从我的 ChildrenComponent
调用它时它不起作用,并且状态永远不会改变。
因此,我将以下代码添加到 output
函数中,以了解发生了什么:console.log(this.setState)
。结果是 "setState" 函数 在那里 .
那么,如果函数 setState
正确绑定到 output
,为什么它不起作用?为什么它 仅在从当前组件调用输出时才起作用?`
我觉得你的代码很不错。我认为您只是对 setState
的作用有点困惑。 setState
是一个内置的 React 函数,因此 运行 console.log(this.setState)
将始终记录一个函数,特别是那个函数。
我不确定你是如何在子组件中调用你的 prop 的,但下面的例子允许子组件将父级状态设置为 render
函数上方的 data
对象return
以及将父状态记录到控制台。
class TheComponent extends Component{
constructor(props) {
super(props);
this.state = {
a: '',
b: ''
};
}
setValues = (data) => {
this.setState({
a: data.a,
b: data.b
});
}
outputValues = () => {
console.log(this.state);
}
render(){
return (
<ChildrenComponent set={this.setValues} output={this.outputValues}/>
<p>{this.state.a}</p>
);
}
}
class ChildrenComponent extends Component{
render() {
const data = { a: 'foo', b: 'bar' };
return (
<button onClick={() => this.props.set(data)}>change parent state</button>
<button onClick={this.props.outputValues}>console.log parent state</button>
);
}
}