如何在 React 中使用 useReducer 更新嵌套对象?

Posted

技术标签:

【中文标题】如何在 React 中使用 useReducer 更新嵌套对象?【英文标题】:how to update nested object with useReducer in React? 【发布时间】:2021-12-30 12:46:38 【问题描述】:

如何使用这个 use reducer 更新 courseName? 错误:“无法在字符串“science”的 courseName 上创建属性。 我假设我没有正确访问它?我一直在使用 useState,但我想学习 useReducer 来处理更复杂的对象。

import React,  useReducer  from "react";

function reducer(state, action) 
  switch (action.type) 
    case "update":
      return  object: (state.object.courseName = "Science") ;

    default:
      return state;
  


export default function TestPage() 
  const object = 
    courseName: "Mathematics",
    courseModules: [
      
        moduleName: "module1",
        isComplete: false,
        lessons: [
          
            lessonName: "Lesson1",
            isComplete: false,
            progress: 0,
          ,
        ],
      ,
    ],
  ;

  const [state, dispatch] = useReducer(reducer,  object );

  function updateName() 
    dispatch( type: "update" );
  

  return (
    <div>
      <h1>object.courseName</h1>
      <button onClick=updateName>submit</button>
    </div>
  );

【问题讨论】:

【参考方案1】:

您可以传播您的对象并只覆盖一个值。

  switch (action.type) 
    case "update":
      return  ...state, object:  ...state.object, courseName: "Science";
    default:
      return state;
  

【讨论】:

以上是关于如何在 React 中使用 useReducer 更新嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章

如何测试组件中的react useContext useReducer调度

React useReducer 异步数据获取

如何将 React Context API 与 useReducer 一起使用以遵循与 Redux 类似的风格 [关闭]

React中useReducer的理解与使用

React中useReducer的理解与使用

在 React 中使用 useContext 和 useReducer 创建新的键值对