javascript 编辑表单React JS

3bygqnnd  于 2023-05-12  发布在  Java
关注(0)|答案(1)|浏览(174)

我用React js做了一个编辑表单。我在表单中有多个组件。在其中一个子组件中,我将我所做的所有更改传递给主组件中的一个钩子,以便在firebase中进行更改。
父组件

const [changes, setChanges] = useState({});
const updateGenData = (genData) => {
    setChanges(genData);  
  }

儿子组件(我通过 prop 从父亲那里获取所有信息)

const UpdateProfileGenData = (props) => {

 const [values, setValues] = useState({});
 const [changes, setChanges] = useState({});

 useEffect(() => {
    setValues(props);
 },[props]); 

 const {field1, field2, field3} = values;

 useEffect(() => {
    props.updateGenData(changes);
},[changes]); 

  const handleChange= e => {
        setValues({
            ...values,
            [e.target.name]: e.target.value
        });
         setChanges({
          ...changes,
          [e.target.name]: e.target.value
      }) 
    }
return (

<input type="text" name="field1" value={field1} onChange={handleChange}/>
<input type="text" name="field2" value={field2} onChange={handleChange}/>
<input type="text" name="field3" value={field3} onChange={handleChange}/>

);
}
export default UpdateProfileGenData;

当我传递值时 它不允许我编辑子窗体。我不能改变任何领域。
有什么建议吗??
问候

2hh7jdfx

2hh7jdfx1#

为什么你经常使用useEffect?问题可能是您经常使用useEffect,并且在某些地方正确地覆盖了数据。可以变得更容易:
父组件

const [changes, setChanges] = useState({});
const updateGenData = (genData) => setChanges({...changes, ...genData});

子组件

const UpdateProfileGenData = ({field1, field2, field3, updateGenData}) => {

  const handleChange= e => updateGenData({
            [e.target.name]: e.target.value,
        });

return (

<input type="text" name="field1" value={field1} onChange={handleChange}/>
<input type="text" name="field2" value={field2} onChange={handleChange}/>
<input type="text" name="field3" value={field3} onChange={handleChange}/>

);
}
export default UpdateProfileGenData;

相关问题