4

在这个场景中经过几次测试后,我有一些我自己无法回答的问题,所以我请求帮助澄清我的概念。

  1. Navigator 中的提供者与道具

有什么区别以及设置 Navigator 并将 store 传递到 React Native 应用程序的不同场景的最佳方法是什么

export default class App extends Component {
  render () {
    return (
      <Provider store={store}>                        //<-- here
        <Navigator style={{flex: 1}}
        initialRoute={{ component: MainContainer }} //<-- here 

          renderScene={ (route, navigator) => {
            const Component = route.component;
            return (
              <View style={{flex: 1, marginTop:40}}>
                <Component navigator={navigator} route={route} {...route.passProps} />
              </View>
  ...

MainContainerComponentreact-reduxconnect函数内连接,将 Props 和 Actions 传递给props.

是更好地访问上下文还是道具?

对比

const store = createStoreWithMiddleware(reducer, initialState); //<-- here
export default class App extends Component {
render () {
  return (
    <Navigator style={{flex: 1}}
      initialRoute={{ component: MainComponent }}

      renderScene={ (route, navigator) => {
      const Component = route.component;
      return (
        <View style={{flex: 1, marginTop:40}}>
          <Component 
             navigator={navigator} 
             route={route} 
             {...route.passProps} 
             store={store}                      //<-- here
               />
       </View>
    ...
  1. 在组件场景中,(不包装为智能容器)如何设置有关redux 状态更改的侦听器或让我将组件状态绑定到 redux 状态。

传递state(Redux 存储) 和push in时actions一样,然后派发动作并正确执行,状态是更新,但是......不会重新渲染场景。passPropsnewSceneNavigatornewScene

我是否必须将状态组件绑定到 Redux 状态才能看到屏幕上反映的更改?

在这种情况下是否有任何关于最佳实践的示例?

  1. propsvsconnect在同一Scene

同样Scene,从Top 到 Down 组件,这是传递redux state(不是谈论component state)作为将组件包装在一个'smart' containerwith ' connect' from中的最佳方法react-redux,或者传递洞方案为props.

4

1 回答 1

2
  1. 应该使用第一个解决方案,因为提供者应该是最外层的组件(这样下面的所有东西都可以正确连接)。
  2. 您可以运行回调componentDidReceiveProps或(我更喜欢)简单地连接需要访问商店的组件。这正是 redux 的用途。不这样做的唯一原因是如果您想将一个组件与另一个存储内容重用(真正的代表性组件)
  3. 这在很大程度上取决于应用程序和组件的深度,但总的来说,这完全没问题。您也可以将信息作为 props 传递,但是随着应用程序变得越来越大,您可能必须传递大量 props,这可能会混淆组件的真正意图
于 2016-05-30T12:08:17.713 回答