我在Reaction中有以下代码,

let [employee, setEmployee] = useState([])
let employeeList = [
    {
        "data": [
            {
                "name": "John",
                "email": "john@example.com",
                "status": "passed"
            },
            {
                "name": "Jane",
                "email": "jane@example.com",
                "status": "failed"
            }
        ]
    }
]

在初始化时,我们给出如下内容:

setEmployee(employeeList)

它在两行中正确地显示了表中状态为"通过"和"未通过"的员工.

在顶部有一个 Select 框,当 Select 该框时, 我们使用以下函数对其进行过滤,

setEmployee(employee => employee[0].data.filter((ele, i) => ele.status === 'passed'));

我看到以下经过筛选的员工状态变量,

// employee (state variable, see the original array of object of arrays is distorted here)
    [
        {
            "name": "John",
            "email": "john@example.com",
            "status": "passed"
        }
    ]

而不是,

[
    {
        "data": [
            {
                "name": "John",
                "email": "john@example.com",
                "status": "passed"
            }
        ]
    }
]

我是新的react 状态,无法实现上述格式.原始的Employee状态变量在 struct 上应该是完整的,但只应该过滤它的深层array.我想我在排队的时候犯了一些错误,

setEmployee(employee => employee[0].data.filter((ele, i) => ele.status === 'passed'));

如有任何帮助,我们不胜感激.请不要建议像useMemo这样的高级概念,但让我们稍微修改一下,以实现我想要的.谢谢.

推荐答案

  • 深入分析后发现,对于.map().filter()函数等大多数函数,数组的对象数组的状态变量工作正常,后续数组包含正确的操作和筛选的值.然而,该问题是由另一个状态变量引起的,该状态变量从大文件中的某个位置操作employee变量,从而在apply.map或.Filter函数时导致该Employee变量的 struct 变形.

但是,在开发ReactJs代码时需要注意以下几点:

  • 在Reaction中,console.log不会始终输出预期值 因为状态变量与角JS或正常JS不同,是异步的 代码片段.
  • Array.push()不是用来更新状态变量的正确方式 新记录;这肯定会折叠中的预期数组值 实时
  • 使用let tempVar = employee.slice(0),然后在 tempVar变量,然后使用setDatasetEmployee更新新的 数组值.这是将新数据推送到 观察.
  • 不要像将arr[0]复制为arr[1]那样实时修改数据,然后 将其设置为arr[1].name = 'New name', arr[1].age = 25,然后 将新状态设置为类似于setEmployee(arr)将不会更新 Employee状态变量,并且很可能会折叠UI,就像我的例子中发生的那样. 原因是我们在我们的JS代码片段中做了很多工作,特别是使用实时模拟数据测试Angular 应用程序.我们不应该对状态变量进行POST初始化,而应该在初始化之前就这样做,以便在将原始JSON数据赋给Reaction的状态变量之前,可以使用伪值对其进行操作.

Reactjs相关问答推荐

react-hook-form问题:为什么getValues不返回大多数当前值?

如何通过回调函数获取多个值?

在React中映射对象数组时,如何正确呈现JSX.Element或React.ReactNode类型?

UseEffect 似乎不适用于页面的首次渲染

console.logs 没有显示在浏览器控制台上,但显示在我的终端上

Primereact 的日历组件在每个月 12 日之后使用非唯一键生成

在 React JS 中编辑表格数据

如何在 ChartJS 中操作 Y 轴

使用 Vite 的 React 中的路由无法正常工作(构建中)

我正在try 使用 cypress 测试我的下拉列表,它 Select 值但不提交它们(手动工作)

react 事件顺序

React Native map 中的初始zoom 级别

如何从 React Redux store 中删除特定项目?

React Native - 身份验证 - 触发值以更改 Auth 和 UnAuth 堆栈导航器

在 Formik 表单中访问子组件的值

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

父状态改变后子组件丢失状态

如何使用 React Router 在 React 中正确同步 useEffect 和 useLocation 挂钩?

将鼠标悬停在仅适用于该类的第一个实例的 p5.js 类上

React中`onScroll`和`onScrollCapture`之间的区别?