我们可以在多个对象键上使用 action.payload 吗?

Can we use action.payload on multiple object keys?

我想通过此操作将任务添加到我的 Todo 应用程序:

addTask: (state, action) => {
      const newTask = {
        id: uuidv4(),
        text: action.payload,
        completed: false,
        date: action.payload,
      };
      state.push(newTask);
    },

将以这种方式发送以显示文本和日期:

  const handleSubmit = (e) => {
    e.preventDefault();
    if (!inputFieldSlice || !dateSlice) return;

    dispatch(addTask(`${inputFieldSlice} on: ${dateSlice}`));

    dispatch(clearInputField(""));
    dispatch(clearDate(""));
  };

输出将是这样的:购物时间:2021-11-03

我想知道这是否是正确的方法,以及我是否真的可以将 action.payload 传递给一个对象中的两个不同的键。

action.payload 不一定是字符串。您甚至不需要将其命名为 payloadaction。您可以简单地将一个对象作为有效负载传递给您想要的任何键。在这种情况下,我选择了 textdate

addTask: (state, action) => {
  const newTask = {
    id: uuidv4(),
    text: action.payload.text,
    completed: false,
    date: action.payload.date,
  };
  state.push(newTask);
},

// ...

const handleSubmit = (e) => {
  e.preventDefault();
  if (!inputFieldSlice || !dateSlice) return;

  dispatch(
    addTask({
      text: inputFieldSlice,
      date: dateSlice,
    }),
  );

  dispatch(clearInputField(''));
  dispatch(clearDate(''));
};

通过将它们分开存储,当你渲染任务时,你可以这样渲染它:

<ul>
  {tasks.map((task) => (
    <li key={task.id}>
      {task.text} on: {task.date}
    </li>
  ))}
</ul>