所以我最近开始使用react-native,我显然希望使用最佳实践来处理我的应用程序。这就是为什么我决定使用redux并按照建议编写无状态的功能组件。什么是无状态组件实现表单输入验证的正确方法
一旦我习惯了它,并建立了一些标准,它运行良好一段时间:我写了一个功能组件,地图状态和派遣到它的道具,并有一个商店,保持跟踪事物是如何被注入Provider
。
一旦我对表单输入组件进行验证,事情就变得复杂了。假设我想有一个组件可以验证其输入并在出现问题时显示错误。我明显可以为我的全球商店添加一些状态,但我不想在我的全球商店中为我的应用中使用的每个输入位置添加一个位置。这可能与使用redux所教的内容相反,但我有一种感觉,我想要的不是那么不切实际。
所以给我想要的东西例如:
const Input = ({ error }) => {
let style = styles.input;
const onChange = (val) => {
// change the error here, say
if(val === 'test') error = null;
else error = 'must be test';
};
if (error) {
style = styles.inputError;
}
return (
<TextInput
style={style}
onChangeText={onChange}
/>
);
};
但我不希望有错误连接到一个全局状态。
这难道不是要问吗,还是我忽略了让Input
刷新自己的方式(我根本拿不到this
)?
我知道这是一个更为哲学的问题,因为有一个为组件创建ES6类并使用setState
的明显解决方案。我最感兴趣的是听到解决这个问题的一些方法,如果有问题,或者我只是过于固执。 :)
正在使用父母非功能组件中的反应状态解决方案吗?否则,如果要控制输入,则不应使用功能组件。 – FurkanO
我没有非功能组件。如果我想控制我的输入,是否有我不应该使用功能组件的原因?如果我想要父母设置我的组件输入,该怎么办?有没有办法做到这一点,同时保持父母功能? –
1。保持你的Redux状态,2。具有反应状态和onChange处理程序的非功能组件,3。仅在提交时验证输入,而不是像onChange = {myHandler} – FurkanO