【发布时间】:2020-04-08 12:51:36
【问题描述】:
我创建了一个表单,当用户做出选择时,我想将表单输入的值实时传递给同级组件。
我正在使用 react-hook-form 并且能够成功地使用 watch 查看用户输入的值,但我只知道如何将其传递给孩子,而不是兄弟姐妹。
App.js
这是父母
import React from 'react'
import Form from './Form';
import Message from './Message';
const App = () => {
return (
<div>
<Form />
<Message/>
</div>
);
};
export default App;
Form.js
这是孩子。
import React from 'react';
import { useForm } from 'react-hook-form';
import { Select, MenuItem } from '@material-ui/core';
import { Controller } from 'react-hook-form';
function Form() {
const {control, watch } = useForm();
const watchDiet = watch('diet');
return(
<form>
<label htmlFor="diet">Dietary requirements</label>
<Controller
as={
<Select name="diet">
<MenuItem value="meat">Meat eater</MenuItem>
<MenuItem value="veggie">Vegetarian</MenuItem>
<MenuItem value="vegan">Vegan</MenuItem>
))}
</Select>
}
control={control}
name="diet"
id="diet"
/>
</form>
);
}
export default Form;
Message.js
这是孩子的兄弟姐妹。我想将值传递给这个组件
import React from 'react';
const Message= (props) => {
return (
<div>
If the user selects "Meat eater" in Form.js I want to
pass the value "meat" into this component
</div>);
};
export default Message;
我对 React 很陌生,所以很难思考如何做到这一点。非常感谢 Wny 的指导。
非常感谢,
凯蒂
【问题讨论】:
-
你从哪里获得 Form.js 中的
control对象? -
对不起,我现在很忙。但我有几个建议。您需要将回调作为道具传递给 Form 并在满足特定条件时调用该回调。您需要有一种方法来处理该回调,该回调将该值写入状态变量。然后将该状态变量作为道具传递给消息组件。
-
@Adam Jeliński - 这是一个很好的观点......看起来我试图过于激进地削减我的代码!我会修改的。
-
@awran5 - 你是对的。我也错过了!我会再做一次修改。在我的真实代码中,这是在一个子组件中,但为了便于解释,我已将其全部放入表单中(除非我遗漏了它并不那么容易!!)
标签: reactjs forms react-hooks react-hook-form