javascript - 在反应中将状态从类组件传递到功能组件
问题描述
我有一个类,我声明:
constructor() {
super();
this.state = {
checked: false,
house: [],
selectedHouse: null
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(checked) {
this.setState({ checked });
}
render() {
return (
<React.Fragment>
<TSwitch handleChange={this.handleChange.bind(this)} house={this.state.house} houseClicked={this.h}></TSwitch>
</React.Fragment>
);
}
然后我想state.checked
从一个子组件设置:
function TSwitch(props) {
const handleChange = (house) => (evt) => {
props.handleChange(house);
};
return (
<div>
{props.house.map((house) => {
return (
<label>
<span>Switch with default style</span>
<Switch onChange={handleChange} checked={this.state.checked} />
</label>
);
})}
</div>
);
}
我可以调用 handleChange 但我希望能够更改组件的值state.checked
。<TSwitch/>
解决方案
这就是你的父组件应该是这样的:
constructor() {
super();
this.state = {
checked: false,
house: [],
selectedHouse: null
};
this.handleChange = this.handleChange.bind(this);
}
handleChange(checked) {
this.setState({ checked });
}
render() {
return (
<React.Fragment>
<TSwitch handleChange={this.handleChange} isChecked={this.state.checked} house={this.state.house}></TSwitch>
</React.Fragment>
);
}
这是您的子组件的外观:
function TSwitch(props) {
return (
<div>
{props.house.map((house) => {
return (
<label>
<span>Switch with default style</span>
<Switch onChange={x => props.handleChange(x)} checked={props.isChecked} />
</label>
);
})}
</div>
);
}
注意:您正在使用Switch
组件,我不确定变量x
是 aboolean
还是 an object
,但很可能应该是boolean
:true
或false
。如果这不起作用,请记录x
& 的值,看看它是否是一个对象,然后将布尔值传递给props.handleChange
. 虽然我仍然认为这不是必需的。祝你好运!
推荐阅读
- sql - 如何找回上一期的输赢数据?
- python - Keras 模型精度没有提高 - 图像分类
- javascript - 声明后未读取导入值
- webpack - chrome 在调试 webpack 构建的捆绑 javascript 文件时不显示原始变量名
- python - Gunicorn + eventlet 在 SIGTERM 信号处理程序中使用 redis 连接
- javascript - 如何解决 MIME 类型的二进制/八位字节流问题?
- java - android 应用程序 - 当我尝试使用振动时 Java 迷恋
- flutter - 在flutter video_player插件上设置代理url以在cdn工作流上进行hls重定向
- azure - 无法将文件从 azure 文件共享复制到 azure VM 中的本地磁盘
- javascript - JavaScript映射中出现值最高的键?