【问题标题】:Get value of <select> element with React.useState in Nextjs在 Nextjs 中使用 React.useState 获取 <select> 元素的值
【发布时间】:2021-07-16 00:54:07
【问题描述】:

我在 Nextjs 中使用 React 的 useState 函数遇到问题。

我有一个元素,它本身就有几个。现在,如果我选择 e useState 应该使用 selected 的值设置一个变量。

const [value, setValue] = useState('')

...

function logValue() {
  console.log(value)
}

return (
<div>
  <select onChange={(e) => {setValue(e.target.value)}>
    <option value="a">a</option>
    <option selected value="b">b</option>
    <option value="c">c</option>
    <option value="d">d</option>
  </select>

  <button onClick={logValue}>submit</button>
</div>
)

我现在的问题是,当我第一次在选择字段中进行更改时,setValue 会设置更改前的值。

当我加载页面并将所选内容更改为“a”时,logValue 不会打印任何内容。 然后我将值更改为“d”,logValue 打印“a”。 然后我将值更改为“c”,logValue 打印“b”。等等……

我怎样才能做到这一点,当我将选择字段更改为“a”logValue 打印“a”?

【问题讨论】:

    标签: javascript html reactjs next.js


    【解决方案1】:

    如果您检查控制台,您应该能够看到 Warning: Use the `defaultValue` or `value` props on &lt;select&gt; instead of setting `selected` on &lt;option&gt;

    所以你需要做类似的事情:

    export default function App() {
      const [value, setValue] = useState("b");
    
      function logValue() {
        console.log(value);
      }
    
      return (
        <div>
          <select
            value={value}
            onChange={(e) => {
              setValue(e.target.value);
            }}
          >
            <option value="a">a</option>
            <option value="b">b</option>
            <option value="c">c</option>
            <option value="d">d</option>
          </select>
    
          <button onClick={logValue}>submit</button>
        </div>
      );
    }
    

    【讨论】:

    • 感谢您的回答。这消除了控制台中的错误,但现在选择字段坚持来自value={value} 的值并且它仍然没有设置更改时的新值...
    • 怎么回事?我制作了 Codesandbox 示例,它运行良好 codesandbox.io/s/httpsstackoverflowcomquestions67202439-nsj9l
    • 你是对的!我想我把我的代码搞砸了……我的代码中有几个useState有问题……
    猜你喜欢
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 2021-07-11
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 2012-12-01
    相关资源
    最近更新 更多