Javascript 反应挂钩-我应该使用';useState';对于不变的状态?
当我最初学习React组件时,我总是被告知将所有内容都放在Javascript 反应挂钩-我应该使用';useState';对于不变的状态?,javascript,reactjs,react-hooks,Javascript,Reactjs,React Hooks,当我最初学习React组件时,我总是被告知将所有内容都放在这个.state中。无论是经常更新的数据还是从不更新的数据 然而,随着React钩子的实现,即使状态不会更新,我也不确定应该使用useState的频率 让我给你举一个我的一些表单逻辑的例子: const FormAuth = props => { //Frequently updates const [validInput, setValidInput] = useState({ isComplete
这个.state中。无论是经常更新的数据还是从不更新的数据
然而,随着React钩子的实现,即使状态不会更新,我也不确定应该使用useState
的频率
让我给你举一个我的一些表单逻辑的例子:
const FormAuth = props => {
//Frequently updates
const [validInput, setValidInput] = useState({
isCompletedForm: Boolean,
firstName: Boolean,
lastName: Boolean,
email: Boolean,
password: Boolean,
confirmPassword: Boolean
});
// Never updates
const [formSchema, setFormSchema] = useState({
firstName: Joi.string().required(),
lastName: Joi.string().required(),
email: Joi.string().required().email().regex(emailRegex),
password: Joi.string().required().regex(/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[#$^+=!*()@%&?.]).{8,30}$/),
confirmPassword: Joi.string().required()
})
// Never updates
const [inputRef, setInputRef] = useState({
firstNameRef: React.createRef(),
lastNameRef: React.createRef(),
emailRef: React.createRef(),
passwordRef: React.createRef(),
confirmPasswordRef: React.createRef()
});
// render some JSX
}
这里我有三个州。第一个状态是布尔值,表示输入是否良好。第二种状态是永远不会更新的formSchema。最后,第三种状态是每个输入的参考,也永远不会更新
我的问题是:对于validInputs
只有一个状态更合理,因为它经常更新,然后对于formSchema
和inputRef
使用普通javascript创建一个const对象?还是一切都应该像以前那样进入状态
在我看来,如果状态要更新,那么只使用useState
会更有意义,但我正在尝试了解钩子前进的正确约定。您应该只需要在以下情况下使用状态:
- 它控制某种类型的(如
输入
,选择
,
textarea
等)
- 它控制着一些需要处理的数据(如待办事项列表,需要创建、读取、更新和删除一些项目——对于同构应用程序也是如此,其中一些数据在发送到后端存储之前需要在前端处理)李>
- 它用于某种类型,其中DOM需要随着UI更改而重新呈现(如
isLoading
布尔值,当为true
时显示微调器,但当为false
时显示某种布局)
如果您的状态(无论它是什么):需要跨多个组件重用,是静态的,并且不以任何方式更新DOM(如ref、字段级验证函数或某种静态项列表),那么就没有理由将其弄乱
简单地说,不管它是类组件还是带有钩子的功能组件,只要它需要动态地操作/控制DOM中的某些内容,就只需要使用state
下面是一个带有一些验证的表单的简单示例:
我担心您频繁更新的状态处于对象状态。是的,你们可以这样做,但这不是一个好方法来更新你们的个人状态,把他们放在对象
如果数据未更改或更新,则不需要将其保持在状态。您可以在某些变量中指定该类型的数据
//您可以通过此函数跟踪状态值和状态更改
//您可以在不同的组件中使用相同的功能
导出函数用于输入(initialValue=“”){
常量[input,setInput]=使用状态(初始值);
函数handleInputChange(e){
设置输入(如目标值);
}
返回{
值:输入,
onChange:handleInputChange,
}
}
const FormAuth=props=>{
//经常更新
//useFormInput函数将返回输入值并取消对函数的更改
const firstName=useFormInput();
const lastName=useFormInput();
//永不更新
//在这里,不更新数据是在formSchema变量中分配的
const formSchema={
名字:Joi.string().required(),
lastName:Joi.string().required(),
电子邮件:Joi.string().required().email().regex(emailRegex),
密码:Joi.string().required().regex(/^(?=.[a-z])(?=.[a-z])(?=.*\d)(?=.[#$^+=!*()@%&])。{8,30}$/,
confirmPassword:Joi.string().required()
}
//永不更新
常量inputRef={
firstNameRef:React.createRef(),
lastNameRef:React.createRef(),
emailRef:React.createRef(),
passwordRef:React.createRef(),
confirmPasswordRef:React.createRef()
}
返回(
//firstname值和onchange函数将
//分配使用扩展运算符
)
}
我认为应该使用useRef
挂钩,而不是createRef