javascript - 多个状态在 React 中共享相同的视图或组件
问题描述
是否可以说两个状态更新单个视图/组件?我们如何在反应中做到这一点?
this.state({
dog: 'Canny'
person: 'Brian'
})
<Text>{blank} likes beans.<Text>
例如,当 this.state.dog 更新时,该字段将显示“Canny likes beans”,当 this.state.person 更新时,该字段将显示“Brian likes beans”。有没有办法做到这一点?
编辑:这对于视图只有一个窗口来显示两种状态的更新的情况很有用,我知道您可以使用渲染功能来实现这一点,但是有没有一种简单的“第一原则”方式来做出反应?
解决方案
这应该通过引入另一个状态属性来完成personOrDog
:
<Text>{this.state.personOrDog} likes beans.<Text>
没有直接的方法来检查以前的和当前的person
以及dog
要计算的状态personOrDog
。以前和当前状态可用,shouldComponentUpdate
但不鼓励使用setState
to 设置personOrDog
,因为它滥用了这个生命周期钩子。
这意味着最好在更新状态的地方解决此问题:
this.setState({
dog: 'Canny',
personOrDog: 'Canny'
});
要使代码 DRYer,可以使用帮助程序来设置这些属性,例如:
const personOrDog = (key, value) => ({
[key]: value,
personOrDog: value
});
...
this.setState(personOrDog('dog', 'Canny'));
推荐阅读
- python - 如何将 PyTorch sigmoid 函数更改为更陡峭
- javascript - 从 Sequelize 中的另一个表中计数
- xcode - 我可以安全地删除哪些 Xcode 文件?
- haproxy - 无法在 HAProxy 2.2 中仅删除一个 Set-Cookie 标头
- java - 如何使用 Java 在 MongoDB 中的对象数组中获取特定字段?
- ruby-on-rails - Rails“注意到宝石”说未初始化的常量
- css - 在 SCSS hsla() 函数中使用 CSS 自定义属性
- python - 如何将数据框中的行作为字符串检索?
- javascript - javascript var a1 并使用 alert(a+1) 字符串和数字调用
- spring-cloud - Spring Cloud 3.1 关于如何在 Spring Boot 应用程序中使用 KTable 的文档