Rudx-thunk 在调度异步操作方面做得很好,它最终会修改异步操作中获取的状态。但是我怎么知道它最终修改获取的 redux 状态的那一刻呢?
就我而言,我想从服务器读取配置,因为有些组件需要这些配置,所以我必须在获取配置后渲染整个应用程序。但到目前为止,我无法通过使用 redux-thunk 或任何其他 redux 异步中间件来解决问题。
更新 #1 显示一些代码来更好地表达自己。
// reducer
(state, action) => Object.assign({}, state, {config: action.config});
// action creator
const fetchConfig = () => (dispatch) => {
fetch('http://server.com/...')
.then(config=>dispatch({type: 'LOAD_CONFIG', config}))
}
// connect reducer to state
createStore({config: configReducer})
// render
import { render } from 'react-dom';
render (<App><News /></App>)
// some component consume state.config
@connect(state=>{config: state.config})
const News = props=>(
<div>
{(props.config === '...')? <div>...</div> : <div>...</div>}
</div>
)
以上看起来不错,但是由于该操作可能需要时间并且在组件首次渲染后更新状态,因此组件可能会显示意外结果。我真正想做的是(我只是写下渲染部分,其他应该一样):
// render
loadConfigFinished
.then(()=> render((<App><News /></App>)))
或者
// render
on('loadConfigFinished', ()=> render((<App><News /></App>)));
可能,我应该做第二种方式,只是害怕它不是redux-y。
无论如何,上面只是一个示例,显示有时我们确实需要在某些操作最终分派到 redux 状态时得到通知。