使用redux工具包更新列表时出现问题

4szc88ey  于 2022-11-12  发布在  其他
关注(0)|答案(2)|浏览(164)
// './file_1'

import { createSlice } from '@reduxjs/toolkit';

export const array = createSlice({
    name: 'array',
    initialState: {
      value: []
    },
    reducers:{
      append(state, a) {
        state.value.push(a)
      }
    }
});

export const { append } = array.actions;
export default array.reducer;

我也更新了商店,所以那边没问题

'/.file_2'
import { useSelector, useDispatch } from 'react-redux';
import { append } from './file_1';
const dispatch = useDispatch()
let x = 5
dispatch(append(x));

会引发此错误:对象作为React子对象无效(找到:如果您想要呈现子对象的集合,请改用数组。

vq8itlhq

vq8itlhq1#

“a”是一个对象。对象看起来像这样-〉{action:...,有效负载:...}因此您需要像这样访问它-〉a.payload

enyaitl3

enyaitl32#

问题

问题是代码尝试呈现的对象不是有效的JSX。
因为你没有关于数组的错误,我假设你正确地Map了它,如下所示:

const array = useSelector(state => state.array);

...

return (
  ...
  {array.map(el => (
    <div>{el}</div> // <-- error, can't render object!!
  ))}
);

错误是error: Objects are not valid as a React child (found: object with keys {type, payload}),这是非常明显的,操作对象被调度到Redux存储并保存到状态。

export const array = createSlice({
  name: 'array',
  initialState: {
    value: []
  },
  reducers:{
    append(state, a) {
      state.value.push(a) // <-- `a` is action object `{ type: 'append', payload: 5 }`
    }
  }
});

溶液

我确信您的意思是只保存 * payload值,而不是 * 整个 * action对象,因为调度值x是一个基元数字类型。

const dispatch = useDispatch()
let x = 5
dispatch(append(x));

更新reducer函数,以解包有效负载并保存到状态中。

export const array = createSlice({
  name: 'array',
  initialState: {
    value: []
  },
  reducers:{
    append(state, action) {
      state.value.push(action.payload); // 5
    }
  }
});

相关问题