【发布时间】:2023-04-01 04:22:01
【问题描述】:
所以,我有一个redux slice,里面有两个reducer,setTodos和addTodo,初始状态设置为空,但是很快用reducer更新了setTodos,@的数据987654324@(从组件调度)是通过网络调用获取的,所以它是一个异步任务。数据已正确更新,但是当我尝试添加新的待办事项时,添加的内容不会像应有的那样反映在屏幕上,也许它仅在重新加载时显示,因为再次执行 setTodos 并相应地更新状态。
const myTodoSlice = createSlice({
name:'Todo',
initialState:{todos:[]},
reducers:{
addTodo:(state,action)=>{
state.todos.push(action.payload.todo)
},
setTodos:(state,action)=>{
//Approach 1 of setting the initial todo state.
state.todos = action.payload.arrayOfTodos
//Approach 2 of setting the initial todo state.
// state.todos.push(...action.payload.arrayOfTodos)
}
}
列表渲染代码:
const selector = useSelector((arg:RootStateOrAny)=>arg.todos.todos)
return(
<React.Fragment>
{selector?.map((item:RootStateOrAny) => <TodoItem key={Math.random()} title={item.todoTitle} desc={item.todoDescription} />)}
</React.Fragmnet>
)
目前,我正在遵循方法 1,但这样做,我无法在屏幕上呈现新添加的内容。当我尝试使用方法 2 时,我遇到的错误主要与超出的重新渲染深度有关。 我想通过以下方法 1 知道,为什么没有呈现添加,以及我可以进行哪些更改以获得所需的结果? 谢谢。
【问题讨论】:
标签: reactjs typescript react-redux