【问题标题】:React/Flux/React-Router: How to call to store data when re-routing?React/Flux/React-Router:重新路由时如何调用存储数据?
【发布时间】:2015-11-04 16:53:48
【问题描述】:

工具:React 0.14.0、Vanilla Flux 和 React-Router

在 IndexRoute 之外重新路由时遇到问题。 -我不知道如何为下一个组件调用存储数据。

例如:一个简单的路由

<Route path="/" component={Main}>
    <IndexRoute component={Component1} />
    <Route path="newPath" component={Component2} />
</Route>

Component1(The IndexRoute) 和 Component2 使用相同的存储数据并初始化相同的数据

function getInitialState() {
    return {
      object1: null,
      object2: null,
      object3: null
   }
}

它们的更新方式相同:

function getStateFromStores() {
    return {
      object1: Store1.get(),
      object2: Store2.get(),
      object3: Store3.get(),
    }
}

问题:

但 IndexRoute 肯定会调用 getStateFromStores(),因为它会监听初始加载到存储中,但 Component2 在路由到时仍然为空。

我的不太确定的解决方案

如果我将存储设置为在它们为空时返回“null”,我可以通过设置更改它的初始化来使 Component2 使用其数据呈现​​:

function getInitialState() {
    return {
        object1: Store1.get(),
        object2: Store2.get(),
        object3: Store3.get()
    }
}

我担心我的解决方案可能更像是一个 hack,而不是一个解决方案,并且可能有一个常见的组件生命周期和/或 React-Router 技术来加载组件

【问题讨论】:

    标签: javascript reactjs react-router reactjs-flux


    【解决方案1】:

    您应该在 componentWillMount 而不是您的组件构造函数中执行此操作。该生命周期事件将使您有时间在组件安装到 DOM 之前预先填充本地状态。

    【讨论】:

    • 我还要看看 redux github.com/rackt/redux 和它的 React 绑定:github.com/rackt/react-redux 通过连接装饰器让这一切变得更加简单。
    • function componentWillMount() { return { object1: Store1.get(), object2: Store2.get(), object3: Store3.get() } } 像这样?
    • 不确定你的评论是什么意思,但你会这样做componentWillMount() { this.setState( { object1: Store1.get(), object2: Store2.get(), object3: Store3.get() } ); }
    • Redux 只与原版 Flux 共享一些切线关系。学习 Flux 并不是那么重要,因为 Redux 更侧重于函数式编程概念。如果你已经学习了 Flux 的概念,那么学习这些以及 Redux 如何使用它们并不重要。我会直接跳到它并开始使用它。
    • 不用担心。我认为您没有浪费时间,因为知道 Flux 并没有什么坏处。但是你现在可以通过跳到 Redux 来更接近终点线,这样做对你来说应该不会再困难了 :)
    猜你喜欢
    • 2017-05-29
    • 2016-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2023-03-14
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多