gpt4 book ai didi

javascript - Redux getState 返回服务器上的初始状态

转载 作者:行者123 更新时间:2023-12-03 03:27:22 25 4
gpt4 key购买 nike

我正在构建一个同构的 React 应用程序,并且当用户发送请求时执行以下任务:

1) 假设用户点击 /about-us,react-routers matchPath 找到合适的组件并返回它。
2) 调用名为 fetchData 的静态函数,该函数分派(dispatch)操作 aboutPageContent()。3) 一旦在服务器上解决了 Promise,就会调用 getState 来获取更新的状态,但它返回 aboutPage 的初始状态,而不是新更新的状态

Reducer gets a response but does not return a new state. (this happens only when action is dispatched by server).

服务器上的 getState 返回:

{
aboutUs:{
founders:[{}]
story: ""
}
}

但它应该返回:

{
aboutUs:{
founders:[{name: 'abc'}]
story: "some random story"
}
}
<小时/>

服务器.js

app.get("*", (req, res) => {

const memoryHistory = createMemoryHistory(req.url)
const currentRoute = routes.find(r => matchPath(req.url, r))
const store = configureStore({}, memoryHistory)

if (currentRoute && currentRoute.component.fetchData) {

Promise.all(currentRoute.component.fetchData(store, req.url)).then(() => {

const content = (
<StaticRouter location={req.url} context={{}}>
<Provider store={store}>
<App />
</Provider>
</StaticRouter>
)

const htmlContent = renderToString(content)

const preloadedState = store.getState() <----- Returns initialState and not the updated state.

const html = renderToStaticMarkup(<HtmlDocument html={htmlContent} preloadedState={preloadedState} />)

res.status(200)
res.send(html)
})
}
})

aboutPageContainer.jsx

 static fetchData = (store) => [store.dispatch(aboutPageContent())]
<小时/>

preloadedState 被分配给 window.__data。并且在 client.js 上调用 window.__data 以加载客户端存储。

我做错了什么吗?这是我的第一个 react 同构应用程序。

最佳答案

我认为您需要订阅此处的商店才能获取如下更新。使用 store.subscribe 将确保您获得内部更新的状态。希望能帮助到你。阅读 http://redux.js.org/docs/api/Store.html#subscribelistener

 store.subscribe(() => {
// When state will be updated(in this case, when items will be fetched), this is how we can get updated state.
let items= store.getState().items;
})

关于javascript - Redux getState 返回服务器上的初始状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46261148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com