javascript - 更新数组 useState react 钩子(Hook)(Next.js)

标签 javascript reactjs react-hooks state use-state

我正在尝试更新我的“状态”数组并使用“setState”将字符串类型的项目插入其中,但它不起作用。
我知道它不适用于 push()。
我还尝试使用扩展运算符更新我的“状态”数组,但它也不起作用。
这是我的代码:

import React, { useState } from 'react';
import _, { debounce } from 'lodash';


export default function Search() {

  const [state, setState] = useState([])

  const handleChange = debounce(async (value) => {
    const url = `http://localhost:3100/`
    if (value == '') {
      return
    }
    let response = await fetch(url, {
      headers: {
        'Content-Type': 'application/json'
      },
      method: 'POST',
      body: JSON.stringify({ value })
    })

    let test = await response.json()
    console.log(test)

    setState(state.concat(test))
    // setState([...state, test]) it also doesn't work
    console.log(state)    
  }, 1000)

  return (
    <>
      <div>
        <input onChange={e => handleChange(e.target.value)} />
      </div>
    </>
  )
}

“状态”数组保持为空。我需要了解为什么。

最佳答案

1.) 更改if(value == '')if(value ==='')
2.) console.log(state)在您的 setState 将返回之前的 state 值之后,因为组件尚未刷新。看这里的例子:https://codesandbox.io/s/friendly-ives-vvo13?file=/src/App.js:103-474并输入一些内容并查看控制台。然后输入其他内容并查看控制台。您将看到控制台正在显示您之前输入的状态。但是,如果您查看返回中呈现的 {state},它将显示当前状态。

    export default function App() {
  const [state, setState] = useState([]);

  const handleChange = debounce(async value => {
    let test = ["cars", "boat", "bike"];

    setState([...test, value]);
    console.log(state);
  }, 1000);

  return (
    <>
      <div>
        {state}
        <input onChange={e => handleChange(e.target.value)} />
      </div>
    </>
  );
}

所以你正在设置状态,只是在错误的地方访问/读取它。

关于javascript - 更新数组 useState react 钩子(Hook)(Next.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62265794/

相关文章:

javascript - 使用 CSS 或 JS 显示树列表,并在行尾添加点

javascript - 刷新后重建路线

ReactJS:导入符号链接(symbolic link)组件错误:模块解析失败:意外标记:您可能需要适当的加载程序来处理此文件类型

javascript - 何时使用 useImmer 和 useState?

javascript - 使用 React hooks 时事件监听器函数发生变化

javascript - 使用 d3js-wordcloud Angular 指令将 SVG 导出为 PNG

javascript - Angular UI Router - 子状态的解析始终等待父状态解析

javascript - React Hook "useState"在函数 "setResults"中调用,该函数既不是 React 函数组件也不是自定义 React Hook 函数

javascript - 如何将值从一个组件发送到另一个组件

reactjs - useEffect 不是在组件渲染后运行吗?