mit*_*514 5 javascript reactjs
到目前为止我有一个看起来像这样的组件:
import React from 'react';
// Import images
import logo from '../images/logo-small.png';
class LoginForm extends React.Component {
constructor(props) {
super(props);
this.state = {
email: '',
password: '',
};
this.handleChange = this.handleChange.bind(this);
this.handleSubmit = this.handleSubmit.bind(this);
}
handleChange(e) {
const target = e.target;
const value = target.type === 'checkbox' ? target.checked : target.value;
const name = target.name;
this.setState({
[name]: value
});
}
Run Code Online (Sandbox Code Playgroud)
我将handleChange(e)在我的应用程序上的多个文件的多个组件中重复使用相同的方法。有没有办法可以分离出这个方法,而不必每次都重写它?
我是否可以输入handleChange(e)文件名utils.js并在每次需要使用该文件时导入该文件?如果是这样,我如何确保其this.setState正常工作?
我对如何解决这个问题有一些粗略的想法(例如上面的想法),但我想采取最好的方法。谢谢!
小智 9
钩子是另一种方法。
通过自定义挂钩,您可以在组件之间轻松地重用状态相关处理程序。
// hooks.js
const { useState } from 'react';
const useHandleChange = () => {
const [formValues, setFormValues] = useState({});
const handleChange = (e) => {
let { type, checked, name, value} = e.target;
value = type === 'checkbox' ? checked : value;
setFormValues({
[name]: value
});
};
return { formValues, handleChange };
}
// Component.js
import useHandleChange from './hooks';
const LoginForm = () => {
// you can use that on each component that needs the handleChange function
const { formValues, handleChange } = useHandleChange();
return (
// html template
);
};
Run Code Online (Sandbox Code Playgroud)
不过,您需要将组件转换为函数组件,因此仅当不需要太多精力来重构代码时,我才会提出此解决方案。Hooks 不适用于类组件。
| 归档时间: |
|
| 查看次数: |
5691 次 |
| 最近记录: |