使用Redux时出现Attempted to assign to readonly property错误排查
问题原因及解决办法
这个错误的核心是你直接修改了从useSelector拿到的只读状态数据,而非通过Redux的action来更新状态。
Redux(包括Redux Toolkit)中,通过useSelector获取到的状态是只读的,你不能直接对transactions_list做诸如transactions_list.push(newItem)或者transactions_list = newData这类操作——这类直接修改行为会触发"只读属性赋值"的错误。
你的slice定义本身是没问题的,正确的更新方式应该通过dispatch调用saveTransactionsList来传递新数据:
import { useDispatch } from 'react-redux'; import { saveTransactionsList } from './你的slice文件路径'; // 在组件内部 const dispatch = useDispatch(); // 需要更新数据时调用 const updateTransactions = (newData) => { dispatch(saveTransactionsList(newData)); };
另外要注意:如果你的新数据是从原数组衍生而来(比如添加/删除元素),要确保生成新的数组引用,比如用扩展运算符:
// 正确:生成新数组后再dispatch const newTransactions = [...transactions_list, newItem]; dispatch(saveTransactionsList(newTransactions)); // 错误:直接修改原只读数组 transactions_list.push(newItem); // 会触发只读属性错误
内容的提问来源于stack exchange,提问作者MehdiNasiriPoor
相关产品推荐
相关产品推荐

