【问题标题】:How to insert data with post using react redux?如何使用 React Redux 插入带有帖子的数据?
【发布时间】:2020-06-13 06:21:58
【问题描述】:

我正在学习 react-redux,所以我正在为使用 JSON 占位符 API 的用户创建一个 CRUD 应用程序,现在我能够显示数据、删除和编辑,但是我在添加数据时遇到了问题。

这是沙盒中的现场演示:redux live demo

现在,当我单击添加用户按钮时,出现以下错误。

Cannot read property 'editing' of undefined.

这是我添加用户的表单组件。

import React, { useState } from 'react'
import {useDispatch} from 'react-redux'
import {addUser, addNewUser  } from './redux/acitons/users/Users';

function AddUserForm({ user }) {
    const dispatch = useDispatch();
    const [name, setName ] = useState(user.name);

   const handleSubmit = () =>{
        console.log(name)
        dispatch(addNewUser( {
            ...user, name
        }));
   }

  const handleCancel = () => {
      console.log(user.id);
      dispatch(addUser(user.id))
  }
  return (
    <tr>
      <td>{user.id}</td>
      <td>
        <input
          defaultValue={user.name}
          onChange={e => setName(e.target.value)}
        />
      </td>
      <td>
        <button type="button" className="btn outline" onClick={handleCancel}>
          <i className="material-icons">Cancel</i>
        </button>
        <button
          type="button"
          className="btn btn-success btn-link"
          onClick={handleSubmit}
        >
          <i className="material-icons">save</i>
        </button>
      </td>
    </tr>
  );
}

export default AddUserForm

我需要做些什么来解决这个问题?任何帮助或建议将不胜感激,现场演示可以在这里找到沙盒redux demo

【问题讨论】:

    标签: javascript html reactjs redux


    【解决方案1】:

    查看您的代码 - 您的应用似乎正在崩溃,因为您没有将任何用户有效负载对象传递给addUser 调度调用(在User.js 第 64 行)。

    Here's 解决这个问题的可能方法:

    传递一个新用户有效负载对象,其 id 比列表中的前一个用户高 1),然后为该新 id 调度一个editUser

    const addNewUser = () => {
        const usersList = userData.users;
        const newUserId = usersList[usersList.length - 1].id + 1;
        addUser({
          id: newUserId
        });
        editUser(newUserId);
      };
    

    这是一个非常简单的解决方案(例如 - 更好的方法是为每个用户提供一个唯一的 ID,并在客户端上索引列表而不是基于服务器 ID) - 但它应该让您了解如何把这向前推进。

    【讨论】:

    • 你在沙盒上测试过这个吗?
    • 我做到了。似乎您要传递的对象将用作具有新用户初始属性(id、名称占位符等)的有效负载,但甚至将空对象(addUser({}))传递给@ 987654327@ 将使代码停止破坏。
    • 我是 redux 的新手,所以我在这里需要帮助,如果您知道解决方案,您可以克隆 repo 并显示解决方案吗?
    • 我已经用一个可能的简单解决方案更新了我的答案。
    • 我已经编辑了我的答案和解决方案 - 在 addUser 得到你想要的东西之后(我认为),我也立即发送 editUser
    【解决方案2】:

    首先,要临时处理编译错误,请在 user?.editing 和其他使用 user.id 或其他参数的地方打上问号。 另外,我可以看到您正在使用 id 进行编辑和删除,因此您还应该在 userForm 中设置 id 属性

    【讨论】:

    • 这就是为什么我需要帮助才能很好地理解这一点,如果你知道 naswer ,你可以克隆 repo 并向我展示它是如何以正确的方式完成的,谢谢
    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-02
    • 2021-11-22
    • 2020-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多