【发布时间】:2020-06-29 08:48:58
【问题描述】:
我有一个具有编辑模式的自定义输入组件,我使用多个输入,我的目标是从输入中提取所有状态并将其放在父级上。
我设法为输入值做这件事,因为我为每个输入创建了一个 useState,但是我怎样才能为切换行为实现同样的事情。我想在每个输入旁边有一个按钮来切换输入的状态。(显示/隐藏输入)。
现在,当我按下编辑时,所有编辑布尔值都会被触发,因此所有输入都变得可见。
如何从父级一次切换一个输入,基本上我希望我的自定义组件纯粹用于演示,并且状态应该存在于父级上
例子:
const Parent = () => {
const [value1, setValue1] = useState('')
const [value2, setValue2] = useState('')
const [value3, setValue3] = useState('')
const [editMode, setEditMode] = useState(false)
return (
<div>
<ChildCustomInput value={value1} updateValue={setValue1} editMode={editMode} updateEditMode={setEditMode} />
<ChildCustomInput value={value2} updateValue={setValue2} editMode={editMode} updateEditMode={setEditMode}/>
<ChildCustomInput value={value3} updateValue={setValue3} editMode={editMode} updateEditMode={setEditMode}/>
</div>
)
}
const ChildCustomInput = (props)=> {
// ref to update the input's value in the parent
const textInputEl = useRef(null)
// method to update the parent's values
const updateComponentValue = () => {
props.updateValue(textInputEl.current.value)
props.updateEditMode(!props.editMode)
}
// Toggle Edit mode
const changeEditMode = () => {
props.updateEditMode(!props.editMode)
}
const renderEditView = () => {
return (
<div>
<input ref={textInputEl}></input>
<button onClick={updateComponentValue}>
OK
</button>
</div>
)
}
const renderDefaultView = () => {
return (
<div>
<div>
{props.value}
</div>
<button onClick={changeEditMode}>
EDIT
</button>
</div>
)
}
return (
<div>
{
props.editMode
? renderEditView()
: renderDefaultView()
}
</div>
)
}
export default Parent;
【问题讨论】:
标签: reactjs react-hooks