Reactjs 如何模拟使用React酶更改儿童的值
考虑到以下简单组件:Reactjs 如何模拟使用React酶更改儿童的值,reactjs,jestjs,enzyme,Reactjs,Jestjs,Enzyme,考虑到以下简单组件: function ValueInput (props) { const [val, setVal] = useState(props.value); return <input value={val} onChange={v => setVal(v)}/>; } function MyComponent (props) { const [val, setVal] = useState(props.value); return (
function ValueInput (props) {
const [val, setVal] = useState(props.value);
return <input value={val} onChange={v => setVal(v)}/>;
}
function MyComponent (props) {
const [val, setVal] = useState(props.value);
return (
<div>
<div>{val}</div>
<ValueInput value={val}/>
</div>
);
}
即使强制更新也不会更改值。打印的组件保持不变:
<MyComponent value={42}>
<div>
<div>
42
</div>
<ValueInput value={42}>
<input value={42} onChange={[Function: onChange]} />
</ValueInput>
</div>
</MyComponent>
42
在您的代码中
function ValueInput (props) {
const [val, setVal] = useState(props.value);
return <input value={val} onChange={v => setVal(v)}/>;
}
另外,看看代码,不必复制子组件内的状态,您可以直接使用父组件的方法来操作和存储输入值:
function ValueInput ({val, setVal}) {
return <input value={val} onChange={setVal}/>;
}
function MyComponent (props) {
const [val, setVal] = useState(props.value);
const handleChange = e => {
const {value} = e.target;
setVal(value);
}
return (
<div>
<div>{val}</div>
<ValueInput value={val} setVal={handleChange}/>
</div>
);
}
函数值输入({val,setVal}){
回来
}
功能MyComponent(道具){
const[val,setVal]=useState(props.value);
常量handleChange=e=>{
const{value}=e.target;
setVal(值);
}
返回(
{val}
);
}
function ValueInput (props) {
const [val, setVal] = useState(props.value);
return <input value={val} onChange={v => setVal(v)}/>;
}
function ValueInput (props) {
const [val, setVal] = useState(props.value);
const handleChange = e => {
const {value} = e.target;
setVal(value);
props.setParentVal(value) // Pass the changed value to the parent
}
return <input value={val} onChange={handleChange}/>;
}
function MyComponent (props) {
const [val, setVal] = useState(props.value);
return (
<div>
<div>{val}</div>
<ValueInput value={val} setParentVal={setVal}/>
</div>
);
}
function ValueInput ({val, setVal}) {
return <input value={val} onChange={setVal}/>;
}
function MyComponent (props) {
const [val, setVal] = useState(props.value);
const handleChange = e => {
const {value} = e.target;
setVal(value);
}
return (
<div>
<div>{val}</div>
<ValueInput value={val} setVal={handleChange}/>
</div>
);
}