React native 反应本机+;Redux:如何订阅状态更改?
我有一个组件,我想调用一个方法来检查状态,无论它何时改变。这是我的组件,使用虚拟方法演示我要做的事情(如果React native 反应本机+;Redux:如何订阅状态更改?,react-native,redux,React Native,Redux,我有一个组件,我想调用一个方法来检查状态,无论它何时改变。这是我的组件,使用虚拟方法演示我要做的事情(如果onboarding.show===false,则在屏幕外设置视图动画): react reduxconnect方法将组件包装为一个容器组件,该容器组件可以感知存储的状态更改。每当状态发生更改时,connect都会重新呈现已包装的组件(在您的案例中是随附的) 根据报告: 从技术上讲,容器组件只是使用 subscribe()读取Redux状态树的一部分并提供 道具到它所呈现的呈现组件。你可以写
onboarding.show===false,则在屏幕外设置视图动画):
react reduxconnect
方法将组件包装为一个容器组件,该容器组件可以感知存储的状态更改。每当状态发生更改时,connect
都会重新呈现已包装的组件(在您的案例中是随附的)
根据报告:
从技术上讲,容器组件只是使用
subscribe()读取Redux状态树的一部分并提供
道具到它所呈现的呈现组件。你可以写一封信
手动创建容器组件,但我们建议改为生成
带有React-Redux库的connect()的容器组件
函数,它提供了许多有用的优化来防止
不必要的重新渲染
如果组件在状态更改时未呈现,请检查是否没有改变状态而不是替换状态。Redux通过粗略比较旧状态和新状态(仅比较引用,而不比较值)来检查状态是否已更改
例如,要将项目添加到数组中,不能使用array.push(item)
,因为这不会创建新的数组,只需修改现有的数组即可。相反,您必须使用类似于array.concat(item)
的东西,它确实可以
要更新对象,您可以在示例下的redux文档中看到,要创建新状态,您可以看到:
我们不会改变国家。我们使用Object.assign()创建一个副本。
赋值(状态为{visibilityFilter:action.filter})也是
错误:它将变异第一个参数。你必须提供一个空的
对象作为第一个参数。还可以启用对象排列
操作员建议改为写入{…state,…newState}
看起来这样行得通:
componentWillReceiveProps(props) {
if (!props.onboarding.show) {
this.slideOffScreen();
}
}
不确定是否有办法通过redux API实现这一点,我想我找到了答案,使用componentWillReceiveProps
只要商店的状态发生变化,你的组件就会被重新渲染-你可以在render中做同样的事情。你能提供更多关于slideOffScreen
方法的信息吗?是的,它只是为整个商店设置了动画屏幕视图,使其滑出屏幕。我用代码更新了我的问题
slideOffScreen() {
Animated.timing(this.state.offsetX, {
toValue: -Dimensions.get('window').width,
duration: 350,
easing: Easing.elastic(),
}).start();
}
componentWillReceiveProps(props) {
if (!props.onboarding.show) {
this.slideOffScreen();
}
}