Reactjs 如何在另一个非子组件中使用组件状态作为道具?
我在一个组件中有一个表单,当使用useState提交时,它会将项添加到数组中。我想在另一个组件的选择输入中使用这些数组值作为选项。问题是没有亲子关系。最好的办法是什么 生成Reactjs 如何在另一个非子组件中使用组件状态作为道具?,reactjs,Reactjs,我在一个组件中有一个表单,当使用useState提交时,它会将项添加到数组中。我想在另一个组件的选择输入中使用这些数组值作为选项。问题是没有亲子关系。最好的办法是什么 生成的组件处理数组: import React, {useState, useEffect} from 'react'; import {useForm} from 'react-hook-form'; import Button from 'react-bootstrap/Button'; import Form from 'r
的组件处理数组:
import React, {useState, useEffect} from 'react';
import {useForm} from 'react-hook-form';
import Button from 'react-bootstrap/Button';
import Form from 'react-bootstrap/Form';
function AddProcessForm () {
const {register, handleSubmit, watch, errors} = useForm();
const [processes, setProcesses] = useState([]);
const onSubmit = data => {
setProcesses(processes => [...processes, data])
console.log(data)
document.getElementById("process-entry-form").reset();
}
useEffect(() =>{
console.log(processes);
})
return (
<Form id="process-entry-form" onSubmit={handleSubmit(onSubmit)}>
<Form.Group controlId="" className="mx-2">
<Form.Label>Add Process</Form.Label>
<Form.Control name="processname" type="text" placeholder="Enter Process Name" ref={register}/>
</Form.Group>
<Button variant="primary" type="submit" className="mb-2">
Submit
</Button>
</Form>
)
}
export default AddProcessForm;
我可能会在一个共同的祖先组件中处理这个问题。如果这些组件不相关,或者在父/子链中彼此相距很远,我可能会使用状态管理库(如redux)来处理这种“全局使用”状态。@jdbstillmembersmonica如何从组件传递状态?您不需要。您在父对象中保留状态并将其传递给子对象。您可以使用事件来更改父级中的状态。但是如果这些组件彼此相距很远,那么您最好还是接受@NicolasSEPTIER的建议。@jdbstillMembersMonica实际上只有两个表单,其中一个表单的输出提供另一个表单的选择列表。因为它们是一起显示的,所以我可以将它们放在容器组件中。然后我将使用container
来保存状态,form1
创建一个事件来更改状态,form2
将状态用作道具。这有意义吗?
import React from 'react';
import Form from 'react-bootstrap/Form';
function ActivitytoProcessInput () {
return (
<Form.Group controlId="" className="mx-2">
<Form.Label>Belongs to Process</Form.Label>
<Form.Control as="select">
<option value="" selected>Select a Process</option>
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</Form.Control>
</Form.Group>
)
}
export default ActivitytoProcessInput;