Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 顶级组件根场景/路由器反应本机路由器流量_Javascript_Reactjs_React Native_React Native Router Flux - Fatal编程技术网

Javascript 顶级组件根场景/路由器反应本机路由器流量

Javascript 顶级组件根场景/路由器反应本机路由器流量,javascript,reactjs,react-native,react-native-router-flux,Javascript,Reactjs,React Native,React Native Router Flux,我想在场景的顶层添加一些“逻辑组件” i、 e我明白了: <Router> <Scene key="root" hideNavBar={true}> <Scene key="home" component={HomeContainer} /> <Scene key="search" component={SearchContainer} /> <Scene key="list" comp

我想在场景的顶层添加一些“逻辑组件”

i、 e我明白了:

<Router>
    <Scene key="root" hideNavBar={true}>
        <Scene key="home" component={HomeContainer} />
        <Scene key="search" component={SearchContainer} />
        <Scene key="list" component={ListContainer} />
        ...
    </Scene>
</Router>
所以,我需要做的是将“根”场景连接到Redux,并为其提供通用的减缩器(其他所有场景都依赖的减缩器)。 但是有了它,我想使用componentDidUpdate,componentWillReceiveProps。。。在连接更改时侦听,即Netinfo,以更新减速器的状态

我不确定是否清楚,我希望是这样。如果你需要更多的信息,就问他们

谢谢你的帮助

解决方案

看看亚特兰蒂斯的答案,看看它所说的所有需要的文件:)

我的最终解决方案是:一切按预期运行:

const ConnectedRouter = connect()(Router)

const scenes = Actions.create(
    <Scene key="root" hideNavBar={true}>
        <Scene key="home" component={HomeContainer} />
    </Scene>
)

class ReduxRouter extends Component {
  componentWillReceiveProps(newProps) {
      if(!newProps.isConnected) {
          // logic
      }
  }
  render() {
    return (
      <ConnectedRouter scenes={scenes} {...this.props}/>
    )
  }
}

const mapStateToProps = (state) => {
  return {
    // State
  }
}

const mapDispatchToProps = (dispatch) => {
  return bindActionCreators({
    // Actions
  }, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(ReduxRouter);
const ConnectedRouter=connect()(路由器)
const scenes=Actions.create(
)
类ReduxRouter扩展组件{
组件将接收道具(新道具){
如果(!newProps.isConnected){
//逻辑
}
}
render(){
返回(
)
}
}
常量mapStateToProps=(状态)=>{
返回{
//陈述
}
}
const mapDispatchToProps=(调度)=>{
返回bindActionCreators({
//行动
},派遣);
}
导出默认连接(mapStateToProps、mapDispatchToProps)(ReduxRouter);

它基本上是我以前尝试过的所有东西的混合,效果非常好!没有“密钥xxx已定义”或其他任何内容。

您可以执行以下操作:

class MyRouter extends React.Component {
    componentWillReceiveProps(newProps) {
        if(!newProps.network.isActive) {
            // do something here
        }
    }
    render() {
        <Router>
            <Scene key="root" hideNavBar={true}>
                <Scene key="home" component={HomeContainer} networkActive={this.props.network.isActive} />
                <Scene key="search" component={SearchContainer} />
                <Scene key="list" component={ListContainer} />
                ...
            </Scene>  
        </Router>  
    }
}
const mapStateToProps = state => state;
export default connect(mapStateToProps)(MyRouter);
编辑-已定义避免键

要避免已定义的密钥,可以使用:

const scenes = Actions.create(
   <Scene key="root" hideNavBar={true}>
        <Scene key="home" component={HomeContainer} networkActive={this.props.network.isActive} />
        <Scene key="search" component={SearchContainer} />
        <Scene key="list" component={ListContainer} />
        ...
    </Scene>  
)
const scenes=Actions.create(
...
)
然后在路由器中:

<ConnectedRouter
   scenes={scenes}
 />

如果要正确更新存储中的数据,则应刷新所有连接的数据

如果可以看到操作/减速器正在运行,但连接的组件从未重新渲染,则很可能是减速器中的状态发生变化,并且连接的组件从未注意到数据更改


如果您正在修改存储中的深度嵌套属性,那么我强烈建议使用ImmutableJS。

这是我尝试过的,但我有“密钥xxx已定义”,我认为最好避免这种情况。。。但你所说的真正问题是,当我尝试它时,它没有刷新我的其他组件(场景)。每个容器都已连接。。。不知道为什么:/看到关于已经定义的键的更新答案..我不理解你评论的另一部分..你说它没有更新你的场景是什么意思?关于你上次的更新,这实际上是有效的,但是这样的话我怎么还能使用组件方法呢?我看了文档,已经尝试了那里的一切(比如你的第一个和第二个答案)。“它没有更新我的场景”,我的意思是,当reducer的状态改变时,它不会刷新其他场景道具(但我可以看到,该操作已经完成,日志)。谢谢你的帮助,非常感谢!没有更多的细节,很难理解如何解决这个问题。。你能给出一个简单的场景,你期望发生什么,以及实际发生了什么吗?我找到了问题的解决方案,看看我的编辑。谢谢你的帮助!:)
const scenes = Actions.create(
   <Scene key="root" hideNavBar={true}>
        <Scene key="home" component={HomeContainer} networkActive={this.props.network.isActive} />
        <Scene key="search" component={SearchContainer} />
        <Scene key="list" component={ListContainer} />
        ...
    </Scene>  
)
<ConnectedRouter
   scenes={scenes}
 />