如何使用useState在React上使用单选按钮?

时间:2020-07-02 22:09:40

标签: reactjs radio-button dom-events use-state

我坚持下去!

我有以下代码在堆栈溢出中找到: How to use radio buttons in ReactJS?

我对使用箭头功能做了一些改进:

const App = () => {

    const [values, setValues] = useState({
        gender: '',
    });
  
    const setGender = (event) => {
        console.log(event.target.value);
        setValues({ ...values, gender: event.target.value });
        console.log(values);
    };
  
  render() {
    return ( 
      <div onChange={setGender}>
        <input type="radio" value="MALE" name="gender"/> Male
        <input type="radio" value="FEMALE" name="gender"/> Female
      </div>
     )
  }
}

export default App;

我选择第一个广播电台和“ MASCULINE”。第一个Consolo.log的结果是“ MASCULINE

-但是,第二个console.log显示“ gender: ''

当我选择第二个收音机时,不刷新页面,它会显示:

-第一个Consolo.log的结果为“ FEMALE”,第二个console.log的结果为“ gender: 'MASCULINE'

,如果我再次切换到第一个: -在第一行显示“ MASCULINE”,第二行显示“ FEMALE” ...

假设状态为一步

如何在“实时”中更新状态?

2 个答案:

答案 0 :(得分:0)

这里的问题是,为什么要“实时”更新状态?您打算如何处理结果?

setState在React中是异步的,因为它可以提高性能。如果您想知道何时更新状态变量以执行某项操作(而不是渲染,因为React会负责处理),可以使用钩子useEffect

useEffect(() => {
  // here, values has already been updated
}, [values]) //<- your dependency array, in this case values

答案 1 :(得分:0)

这是预期的行为。函数完成后,React会触发更新,因此在其中,您将无法看到更新的值

您只需将控制台日志移出该功能,执行setValues就会触发。

如果需要实时获取值,则需要使用ref(请参阅useRef)。

我为您制作了一个演示,使它更易于理解。签出here