React native 反应本机+;Redux:如何订阅状态更改?

React native 反应本机+;Redux:如何订阅状态更改?,react-native,redux,React Native,Redux,我有一个组件,我想调用一个方法来检查状态,无论它何时改变。这是我的组件,使用虚拟方法演示我要做的事情(如果onboarding.show===false,则在屏幕外设置视图动画): react reduxconnect方法将组件包装为一个容器组件,该容器组件可以感知存储的状态更改。每当状态发生更改时,connect都会重新呈现已包装的组件(在您的案例中是随附的) 根据报告: 从技术上讲,容器组件只是使用 subscribe()读取Redux状态树的一部分并提供 道具到它所呈现的呈现组件。你可以写

我有一个组件,我想调用一个方法来检查状态,无论它何时改变。这是我的组件,使用虚拟方法演示我要做的事情(如果
onboarding.show===false,则在屏幕外设置视图动画):


react redux
connect
方法将组件包装为一个容器组件,该容器组件可以感知存储的状态更改。每当状态发生更改时,
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();
    }
  }