【发布时间】:2021-07-09 17:27:37
【问题描述】:
我花了几个小时试图解决这个问题,但没有成功。我有一个可重用的组件,它以任何空对象的状态开始,该对象被赋予一系列基于道具的属性,然后根据用户在每组单选按钮上的输入将显示一个子组件。
不幸的是,应该更新状态的功能将触发用户是否看到子组件。
我相信问题出在我的 editDisplay 函数中。目前,当我单击其中一个单选按钮时,应该成为新状态的新对象已正确记录到控制台,但是当我使用 React Devtools 检查页面时,我发现状态没有更新。话虽如此,我可能会看到一个我误解 useEffect 的情况,也许每次运行 editDisplay 时都在运行 useEffect。任何帮助将不胜感激。
import React, {useState, useEffect} from 'react'
import {Form} from 'react-bootstrap'
import RatingInput from './RatingInput'
export default function MembershipForm({inputs, name, record, setRecord}) {
const [display, setDisplay] = useState({})
useEffect(()=>{
inputs.forEach(input => {
var newDisplay = display
newDisplay[name+input]=false
setDisplay(newDisplay)})
},[])
const editDisplay = (input, visible) => {
var newDisplay =display
newDisplay[name+input]=visible
console.log(newDisplay)
setDisplay(newDisplay)
}
const questions=inputs.map(input => {
return (
<div key={name+input}>
<Form.Group>
<Form.Label className='mx-2'>Do you have a {name} {input} Rating?</Form.Label>
<Form.Check inline label='Yes' value={true} name={name+input} type='radio' className = 'mx-2' onClick ={() =>{editDisplay(input, true)}} />
<Form.Check inline label='No' value ={false} name={name+input} type='radio' className = 'mx-2' defaultChecked onClick = {() =>{editDisplay(input, false)}} />
</Form.Group>
{display[name+input] && <RatingInput input={input}/>}
</div >
)
})
return (
<div className='ml-3'>
{questions}
</div>
)
}
【问题讨论】:
标签: reactjs react-hooks