我是反应 redux 的新手。我想在用户按下搜索按钮时添加加载文本,并在数据返回或操作完成时关闭文本。在正常的异步函数中,我可以在回调之前和之后切换 isLoading 标志。
但是,在我的应用程序中,我正在调度一个返回“类型”和“有效负载”的操作,这是一个承诺。中间件 redux-promise 然后“自动”转换该承诺有效负载并将其发送到减速器。换句话说,中间件在幕后为 Promise 执行 .then 操作,并为我的 reducer 提供正确的数据。
在这种情况下,我不确定如何将加载文本添加到我的视图中,因为一旦我调用 this.props.getIdByName(this.state.value),我不知道数据何时返回。对我来说,合乎逻辑的地方是在 reducer 内,因为那是数据返回的时候。但是,我相信这将是一个坏方法,因为减速器不应该执行这样的任务?
在我的组件中,我的提交具有以下功能
handleSubmit(e) {
e.preventDefault();
this.props.getIdByName(this.state.value);
}
在我的 actions/index.js 文件中,我有以下动作生成器
export function getIdByName(name) {
const FIELD = '/characters'
let encodedName = encodeURIComponent(name.trim());
let searchUrl = ROOT_URL + FIELD + '?ts=' + TS + '&apikey=' + PUBLIC_KEY + '&hash=' + HASH + '&name=' + encodedName;
const request = axios.get(searchUrl)
return {
type: GET_ID_BY_NAME,
payload: request
}
}
在我的 reducers/reducers.jsx 里面
export default function (state = INITIAL_STATE, action) {
switch (action.type) {
case GET_ID_BY_NAME:
console.log(action.payload.data.data.results[0].id); <-- here the data comes back correctly because reduer called the promise and gave back the data for me
return {...state, id: action.payload.data.data.results[0].id};
default:
return state;
}
}
在我的主 index.js 文件中,我使用以下中间件创建了商店
const createStoreWithMiddleware = applyMiddleware(
promise,
thunk
)(createStore);