如何从服务器上获取 Redux Rehydrate?
How to fetch from server on Redux Rehydrate?
我正在使用 React/Redux 和 redux-persist 来维护本地存储持久性。我希望在 redux-persist 完成 Rehydrating the store from local storage 后从服务器加载 'appSettings.json'。
在 persistStore 方法中有一个回调函数,保证在商店重新水化后出现,但我需要调用服务器来获取 appSettings.json。
有没有一种方法可以让我等待获取直到服务器响应?
我需要 appSettings.json 中的 API URL 才能进行 API 调用,但是组件内部的调用发生在 appSettings 获取之前返回。
const persistor = persistStore(store, persistConfig, async () => {
return await fetch('settings.json')
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
store.dispatch({ type: "API_BASE_RESPONSE", base_api_url: data.baseApiUrl });
})
});
我尝试了几种不同的等待方式,但都没有成功。是否有更好的方法来实现我想要实现的目标?
设法通过向 redux-persist 的 PersistGate 添加一个方法来解决(暂时)这个问题。
const onBeforeLift = async () => {
// take some action before the gate lifts
return await fetch('settings.json')
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
store.dispatch({ type: "API_BASE_RESPONSE", base_api_url: data.baseApiUrl });
})
}
ReactDOM.render((
// specify basename below if running in a subdirectory or set as "/" if app runs in root
<Provider store={store}>
<PersistGate
onBeforeLift={onBeforeLift}
persistor={persistor}>
<BrowserRouter basename={WP_BASE_HREF}>
<Routes />
</BrowserRouter>
</PersistGate>
</Provider>
), document.getElementById('app'))
我正在使用 React/Redux 和 redux-persist 来维护本地存储持久性。我希望在 redux-persist 完成 Rehydrating the store from local storage 后从服务器加载 'appSettings.json'。
在 persistStore 方法中有一个回调函数,保证在商店重新水化后出现,但我需要调用服务器来获取 appSettings.json。
有没有一种方法可以让我等待获取直到服务器响应?
我需要 appSettings.json 中的 API URL 才能进行 API 调用,但是组件内部的调用发生在 appSettings 获取之前返回。
const persistor = persistStore(store, persistConfig, async () => {
return await fetch('settings.json')
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
store.dispatch({ type: "API_BASE_RESPONSE", base_api_url: data.baseApiUrl });
})
});
我尝试了几种不同的等待方式,但都没有成功。是否有更好的方法来实现我想要实现的目标?
设法通过向 redux-persist 的 PersistGate 添加一个方法来解决(暂时)这个问题。
const onBeforeLift = async () => {
// take some action before the gate lifts
return await fetch('settings.json')
.then(response => {
return response.json();
})
.then(data => {
console.log(data);
store.dispatch({ type: "API_BASE_RESPONSE", base_api_url: data.baseApiUrl });
})
}
ReactDOM.render((
// specify basename below if running in a subdirectory or set as "/" if app runs in root
<Provider store={store}>
<PersistGate
onBeforeLift={onBeforeLift}
persistor={persistor}>
<BrowserRouter basename={WP_BASE_HREF}>
<Routes />
</BrowserRouter>
</PersistGate>
</Provider>
), document.getElementById('app'))