Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 在受控选择字段上未触发更改时作出反应_Reactjs_React Hooks - Fatal编程技术网

Reactjs 在受控选择字段上未触发更改时作出反应

Reactjs 在受控选择字段上未触发更改时作出反应,reactjs,react-hooks,Reactjs,React Hooks,下面的代码似乎正确,但没有按预期工作 import React, {useEffect, useState} from "react" import ReactDOM from "react-dom" const Page = (props) => { const [selectedValue, setSelectedValue] = useState(0) const handleChange = () => { console.log(1)

下面的代码似乎正确,但没有按预期工作

import React, {useEffect, useState} from "react"
import ReactDOM from "react-dom"

const Page = (props) => {
    const [selectedValue, setSelectedValue] = useState(0)

    const handleChange = () => {
        console.log(1)
    }

    useEffect(() => {
        setTimeout(() => {
            setSelectedValue(2)
        }, 1500)
    }, [])

    return (
        <div>
            <select onChange={handleChange} value={selectedValue}>
                <option value="1">1</option>
                <option value="2">2</option>
            </select>
        </div>
     )
}

ReactDOM.render(
    <Page />,
    document.getElementById('pageRoot')
)
import React,{useffect,useState}来自“React”
从“react dom”导入react dom
常量页面=(道具)=>{
常量[selectedValue,setSelectedValue]=useState(0)
常量handleChange=()=>{
控制台日志(1)
}
useffect(()=>{
设置超时(()=>{
设置选定值(2)
}, 1500)
}, [])
返回(
1.
2.
)
}
ReactDOM.render(
,
document.getElementById('pageRoot')
)

因此,当页面在1.5秒后加载时,它会选择第二个选项,但不会触发onChange,因为控制台中没有记录任何内容。

我猜是因为当元素失去焦点时会发生onChange,所以在通过编程更改此选项时,聚焦永远不会发生。

我猜它的作用是什么,因为当元素失去聚焦时,会发生onchange,所以当以编程方式更改时,聚焦永远不会发生。

以编程方式设置状态不能触发
onchange
处理程序,否则我们会发现自己处于一个无限循环中,有以下组件:

const Page = (props) => {
  const [selectedValue, setSelectedValue] = useState(0)

  const handleChange = (e) => {
    setSelectedValue(e.target.value)
    console.log(1)
  }

  useEffect(() => {
    setTimeout(() => {
      setSelectedValue(2)
    }, 1500)
  }, [])

  return (
    <div>
      <select onChange={handleChange} value={selectedValue}>
        <option value="1">1</option>
        <option value="2">2</option>
      </select>
    </div>
  )
}

以编程方式设置状态不能触发
onChange
处理程序,否则我们会发现自己处于一个无限循环中,有以下组件:

const Page = (props) => {
  const [selectedValue, setSelectedValue] = useState(0)

  const handleChange = (e) => {
    setSelectedValue(e.target.value)
    console.log(1)
  }

  useEffect(() => {
    setTimeout(() => {
      setSelectedValue(2)
    }, 1500)
  }, [])

  return (
    <div>
      <select onChange={handleChange} value={selectedValue}>
        <option value="1">1</option>
        <option value="2">2</option>
      </select>
    </div>
  )
}

您希望onChange通过单击“选项”触发,还是希望它自动触发?@OnUrltan我希望onChange每次在下拉菜单中更改所选选项时都会触发,无论是通过编程还是用户手动更改。我在codeSandbox中尝试了它,它预期会工作@OnUrltan我在控制台中未看到任何登录内容,是吗?仅当手动使用“选择”下拉列表时才会记录,但在1.5秒后的初始页面加载时,即使选择了第二个选项,也不会记录任何内容。每次选择未选择的选项时,它都会打印一个,您可以看到演示下面的控制台选项卡。您希望onChange通过单击“选项”触发,还是希望它自动触发?@onuriltan我希望onChange每次在下拉列表中更改所选选项时都触发,无论是通过编程还是用户手动更改。我在codeSandbox中尝试了它,它预期会在@onuriltan I中工作在控制台中看不到任何日志,是吗?仅当手动使用“选择”下拉列表时,它才会记录,但在1.5秒后的初始页面加载时,即使选择了第二个选项,也不会记录任何内容。每次选择未选择的选项时,它都会打印一个,您可以看到演示下面的控制台选项卡