javascript - 不在状态中设置属性?
问题描述
在我看过的所有教程中,状态属性都设置为空字符串、数组等,所以我认为这是最佳实践。
那么通过事件处理程序设置状态属性是不好的做法吗?
class Form extends Component {
state = { };
handleOptionChange = event => {
this.setState({ [event.target.name]: event.target.value });
};
render() {
return (
<div>
<form>
<label>
<input
type="radio"
name="size"
value="small"
checked={this.state.size === "small"}
onChange={this.handleOptionChange}
/>
Small
</label>
<label>
<input
type="radio"
name="size"
value="large"
checked={this.state.size === "large"}
onChange={this.handleOptionChange}
/>
Large
</label>
</form>
</div>
);
}
}
export default Form;
代码工作得很好,每次选择输入时都会更新状态。
解决方案
你写的东西会很好用。出于以下几个原因,在 state 中设置初始值被认为是最佳实践:
- 组件在初始化时有一个默认值
任何阅读代码的人都知道对
state
属性(及其类型)的期望class Form extends Component { state = { size: 'small' } ... }
这将默认设置this.state.size
为'small'
。如果您不想要默认值,最好设置一个与您希望该 state 属性具有的相同类型的空值。
换句话说,如果您希望this.state.size
它是一个字符串,但您不希望它具有默认值,state = { size: '' }
则会发送消息“此状态具有一个size
属性,我们可以期望它是一个字符串”
推荐阅读
- r-markdown - 如何在 xaringan 自包含幻灯片中嵌入 html 图像
- javascript - 开玩笑未通过异步测试
- google-chrome-app - Chrome Web App 扩展,在创建窗口时最小化到任务栏
- python - cv2.findContours 在黑色背景上找不到白色矩形
- node.js - 将 React 与 Electron 一起使用,以便仍然可以使用 Node.js 原生模块
- python - 指定方法的参数类型和返回类型有什么好处?
- amazon-web-services - 在 API Gateway 和 Lambda 函数中重复输入验证?
- html - css - 剪辑图像并添加边框以适合 div
- visual-studio-code - Xdebug 3.0 WSL2 和 VSCode - 有效的配置
- redis - 即使值存在,redis get 也返回 null