根据docs的状态,react应用程序必须是可序列化的.

假设我有一个待办事项应用程序.

据我所知,我可以在某个地方声明函数,并执行rename(Todo)次,或者通过props this.props.rename(Todo)将该函数传递给组件.

我在某处申报.rename()有两个问题:

我觉得这很傻.对象应该知道可以对其执行什么操作,以及以何种方式执行.不是吗?

我错过了什么?

推荐答案

在Redux中,您实际上没有自定义模型.您的状态应该是普通对象(或不可变记录).他们不需要任何自定义方法.

而不是把方法放在模型上(例如TodoItem.rename),你需要write reducers that handle actions.这就是Redux的全部意义.

// Manages single todo item
function todoItem(state, action) {
  switch (action.type) {
    case 'ADD':
      return { name: action.name, complete: false };

    case 'RENAME':
      return { ...state, name: action.name };

    case 'TOGGLE_COMPLETE':
      return { ...state, complete: !state.complete };

    default:
      return state;
  }
}

// Manages a list of todo items
function todoItems(state = [], action) {
  switch (action.type) {
    case 'ADD':
      return [...state, todoItem(undefined, action)];

    case 'REMOVE':
      return [
        ...state.slice(0, action.index),
        ...state.slice(action.index + 1)
      ];

    case 'RENAME':
    case 'TOGGLE_COMPLETE':
      return [
        ...state.slice(0, action.index),
        todoItem(state[action.index], action),
        ...state.slice(action.index + 1)
      ];
  }
}

如果这仍然没有意义,请通读Redux basics tutorial,因为你似乎对Redux应用程序的 struct 有错误的 idea .

Reactjs相关问答推荐

每个都有重复元素的嵌套组件

eslint -无法解析模块的路径@web3modal/ethers/react导入/no-unresolved

当我在React中使用类方法更新模型的状态时,它在严格模式下触发两次

如何处理具有REACTION-REDUX状态的Nextjs路由警卫

如何使用.Aggregate从多个集合中获取数据,包括使用Mongoose+NextJS的SUM值

阻止组件更新的多分派Redux Thunk或setState是否有任何问题

ReactJS:唯一项目的数量总和

字段是必需的,当它没有定义时

为什么 createSlice 中的 reducer 不能以不同的方式改变状态?

使用登录保护 React 中的 SPA 应用程序 - 为什么这种方法不起作用?

在 React 中使用复选框管理状态

React + i18next + Trans + Prettier:Prettier 最终会在重新格式化 JSX 时 destruct 翻译

当用户输入相同信息时如何禁用更新

使用 react-router-dom 时弹出空白页面

是什么导致了这个令人惊讶的数组导致 React

如何从 extrareducer redux 更改对象中元素的值

为什么重新渲染不会影响 setTimeout 的计数?

如果两个组件在 React 中导入相同的 CSS 文件会发生什么?

如何防止 mui x-date-picker 被截断?

RTK 查询 POST 方法不会改变数据