【发布时间】:2016-09-19 10:41:01
【问题描述】:
所以我最近开始使用 react-native,我显然希望使用最佳实践来处理我的应用程序。这就是为什么我决定使用 redux 并按照建议编写无状态的函数式组件。
一旦我习惯了它并建立了一些标准,它在一段时间内工作得很好:我编写了一个功能组件,映射状态并分派到它的道具,并有一个商店来跟踪事情的进展情况并由 @987654321 注入@。
一旦我开始验证我的表单输入组件,事情就变得复杂了。假设我想要一个可以验证其输入并在出现问题时显示错误的组件。我显然可以为此向我的全局商店添加一些状态,但我不想在我的应用程序中使用的每个输入都在我的全局商店中占有一席之地。这可能与所教授的使用 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。我最感兴趣的是听到一些解决这个问题的方法以及是否存在问题,或者我只是太固执了。 :)
【问题讨论】:
-
在父非功能组件中使用反应状态是一种解决方案吗?否则,如果您想控制输入,则不应使用功能组件。
-
我没有非功能性组件。如果我想控制我的输入,是否有理由不使用功能组件?如果我想让父母设置我的组件输入怎么办?有没有办法在保持父母功能的同时做到这一点?
-
1 。保持它在你的 Redux 状态, 2。具有反应状态和 onChange 处理程序的非功能组件 3 。仅在提交时验证输入,不像您那样 onChange={myHandler}
-
有效点,所以最简单的方法是让 ES6 类可以控制自己的状态并使用它。不幸的是,提交时不能进行输入验证。
-
所以,是的,您应该为此使用非功能性的,这种方法在性能方面并没有太多遗漏
标签: javascript reactjs react-native redux