【发布时间】:2021-04-20 02:09:12
【问题描述】:
我想使用useReducer 和useEffect 获取数据
getPeople 是一个从 https://swapi.dev/documentation#people 返回结果的函数
当我控制台日志results 数据正确获取但状态未更新。
我的功能组件:
export default function App () {
const [state, dispatch] = useReducer(reducer, initialSate);
useEffect(async () => {
const { results } = await getPeople();
dispatch({ type: FETCH_PEOPLE, payload: results });
}, []);
return (
<>
<GlobalStyles/>
{state.loading
? <Loader size={'20px'} />
: <>
<Search></Search>
<People />
</>
}
</>
);
}
我的减速器功能:
export const reducer = (state = initialSate, action) => {
switch (action.type) {
case FETCH_PEOPLE:
return {
...state,
loading: false,
results: action.payload,
counter: state.counter
};
case INCREMENT_COUNTER:
return {
...state,
loading: true,
counter: increment(state.counter)
};
case DECREMENT_COUNTER:
return {
...state,
loading: true,
counter: decrement(state.counter)
};
default:
return state;
}
};
【问题讨论】:
-
您是否尝试在减速器内部记录操作?
-
不要认为这会解决它,但我知道当从 useEffect 调用异步函数调用时,应该将它们放在本地异步函数中。看看这里的这个问题:stackoverflow.com/questions/53332321/…
-
@hellogoodnight 是的,它包含有效负载:10 个数组
-
你在哪里使用状态?显示 People 组件的代码,我假设它使用这个数组。
-
@hellogoodnight 令人惊叹的问题,谢谢我在错误的组件中使用了
useEffect,现在解决了,谢谢
标签: javascript reactjs react-hooks