【发布时间】:2019-03-25 14:28:13
【问题描述】:
我正在构建一个<BasicForm> 组件,该组件将用于在我的应用程序中构建表单。它应该处理提交、验证,还应该跟踪输入状态(如触摸、脏等)。
因此,它需要一些函数来完成所有这些,我一直想知道放置这些声明的最佳位置是什么(关于代码组织和性能优化,考虑到 React 和 JavaScript 最佳实践)。
我正在使用 React 16.8 钩子并与 Webpack 捆绑。
到目前为止,这是我所拥有的:
BasicForm.js
/* I moved those validating functions to a different file
because I thought they are helpers and not directly related
to my BasicForm functionality */
import { validateText, validatePassword, validateEmail } from './Parts/ValidationHelpers';
function BasicForm(props) {
const [inputs, setInputs] = useState({});
const [isSubmitting, setIsSubmitting] = useState(false);
// These are functions to handle these events
function onChange(event) {...}
function onBlur(event) {...}
function onFocus(event) {...}
// This function creates the initial state for each form input
function setInputInitialState(inputProps) {...}
// This functions does what it name says
function validateAllFields() {...}
// This one also
function checkValidationAndSubmit() {...}
return(
<FormContext.Provider value={{
onBlur: onBlur,
onFocus: onFocus,
onChange: onChange,
inputs: inputs,
setInputInitialState: setInputInitialState
}}>
<form onSubmit={onSubmit} method='POST' noValidate>
{props.children}
</form>
</FormContext.Provider>
);
}
我的问题是:如您所见,到目前为止,我声明了我的<BasicForm> 使用的所有函数(onChange、onBlur、onFocus、setInputInitialState、validateAllFields , checkValidationAndSubmit) 在我的BasicForm React 组件函数的主体内部。
这是最佳做法吗?如果我使用类,那么这些函数可能是我的 BasicForm 类的方法。但是自从我改用钩子并摆脱了大多数类后,我总是对将辅助函数放置在我的 React 组件函数体内部或外部存有疑虑。有这方面的最佳做法吗?
当辅助函数可能需要我的主函数中的一些变量或状态时,我总是可以在调用它们时将它们作为参数传递(如果它们在外部声明)。
如果我在我的BasicForm 函数之外声明它们,我会得到什么还是失去什么?请记住,这是一个与 Webpack 捆绑在一起的模块。
【问题讨论】:
标签: javascript reactjs react-hooks