gpt4 book ai didi

reactjs - 异步初始状态React-Redux Redux-Thunk

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

使用 ReactReduxRedux-thunk 我想通过服务器请求(API 调用)获得初始状态,但我不能似乎让它发挥作用。

到目前为止我得到了什么:

var Redux = require('redux');
var carReducer = require('./reducers/cars');
var thunk = require('redux-thunk').default;

var initialState = require('./reducers/initialState');

var rootReducer = Redux.combineReducers({
cars: carReducer
});

module.exports = Redux.applyMiddleware(thunk)(Redux.createStore)(rootReducer, initialState.loadInitial());

这是我最初创建的商店。我的 InitialState 看起来像这样:

var $ = require('jquery');

module.exports = {
loadInitial: loadInitial
};

function loadInitial() {
return {
cars: [
{}
]
}
}

当我尝试将此 loadInitial 转换为 $.get('api/...') 时,Redux 告诉我需要一个初始状态才能让它发挥作用。

在我的 reducer 中,我有一个加载方法:

function updateReducer(state, action) {
switch (action.type) {
case 'load':
return action.data;
case 'update':
return updateCars(action.data, state);
default:
return action.data || initialState.loadInitial().cars;
}
};

但是,如果我使用 - 作为默认 - 异步调用,它似乎不起作用。

我真正想要的是使用数据库中的任何内容来初始化我的商店。这是我的 HandsonTable 所必需的,因为我将属性传递给表,并且正如我现在所拥有的那样,它只会呈现一行,因为我的初始状态只有一个对象。

奇怪的是,当我单击表格时,它实际上会获取我的所有行,因为数据已加载,但我猜为时已晚。

无论如何,我的问题是,如何通过对后端的 api 调用来初始化我的商店?

最佳答案

您可以给它一个空白的初始状态(空对象或可能只是一条加载消息),当您的 API 调用返回时,您可以更新状态,并且您的组件将使用其新数据重新绘制。您可以做的另一件事是在调用返回数据之前不要初始化组件。

编辑以包括示例

在组件的生命周期方法之一中(甚至可能在 getInitialState 中):

getInitialState: function() {
var oThis = this;

$.get({
url: 'api...',
success: function (...) {
oThis.setState({...data returned by server});
}
});

return {};
}

或者,类似这样的事情:

$.get({
url: 'api...',
success: function (...) {
var oStore;

// oStore = response from server

ReactDOM.render(
<ReactRedux.Provider store={oStore}>
<MyComponent/>
</ReactRedux.Provider>
, document.getElementById()
);
}
});

关于reactjs - 异步初始状态React-Redux Redux-Thunk,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37435421/

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