如何将 <any> handleChange 函数从 class 转换为功能组件
How do I convert an <any> handleChange Function from class to functional component
我正在尝试将现有的 React class 转换为功能组件。我知道函数使用 useState()
函数而不是像 class 中那样的 setState()
。我如何将处理任何输入更改的这段代码转换为功能代码?
handleChange = (input) => (e) => {
this.setState({ [input]: e.target.value });
};
您可以为每个字段设置不同的 useState
挂钩,但您不必这样做。通过使用单个 state
对象来保存所有字段,您可以使设置与 class 组件中的设置几乎相同。主要区别在于使用 useState
您必须提供整个状态,因此您需要使用 ...state
来包含未更改的属性。
const Form = () => {
const [state, setState] = React.useState({
first: "",
last: "",
address: ""
});
const handleChange = (input: keyof typeof state) =>
(e: React.ChangeEvent<HTMLInputElement>) => {
setState({
...state,
[input]: e.target.value
});
};
return (
<form>
<input value={state.first} onChange={handleChange("first")} />
<input value={state.last} onChange={handleChange("last")} />
<input value={state.address} onChange={handleChange("address")} />
</form>
);
};
我正在尝试将现有的 React class 转换为功能组件。我知道函数使用 useState()
函数而不是像 class 中那样的 setState()
。我如何将处理任何输入更改的这段代码转换为功能代码?
handleChange = (input) => (e) => {
this.setState({ [input]: e.target.value });
};
您可以为每个字段设置不同的 useState
挂钩,但您不必这样做。通过使用单个 state
对象来保存所有字段,您可以使设置与 class 组件中的设置几乎相同。主要区别在于使用 useState
您必须提供整个状态,因此您需要使用 ...state
来包含未更改的属性。
const Form = () => {
const [state, setState] = React.useState({
first: "",
last: "",
address: ""
});
const handleChange = (input: keyof typeof state) =>
(e: React.ChangeEvent<HTMLInputElement>) => {
setState({
...state,
[input]: e.target.value
});
};
return (
<form>
<input value={state.first} onChange={handleChange("first")} />
<input value={state.last} onChange={handleChange("last")} />
<input value={state.address} onChange={handleChange("address")} />
</form>
);
};