将道具置于状态反应中

时间:2017-09-11 10:23:42

标签: reactjs react-redux

我正在使用react-redux进行当前项目,并且在寻找反应智慧的过程中,我遇到了一个我不明白的“惯例”。 其他程序员倾向于在构造函数中使用prop来说明状态。这是为什么? 我从未在官方文档中看到它,从那里我了解到这两个是持有和共享数据的两个不同的东西。 是否有任何用途或mybe只是个人偏好?

感谢。

2 个答案:

答案 0 :(得分:3)

这听起来像是一种模式,当你需要一些来自组件外部的初始值时,但是想要忽略,或者 立即 影响外部(通过例如,在每次值更改时调度Redux操作。)

例如,您可能有一个表单应该预先填充组件从外部(Redux状态)到mapStateToProps或类似的一些值。 可以让每个表单字段onChange调度一个更改Redux状态的操作,导致传入的props更改,然后使用新值重新呈现表单。 或者也许你发现它有点矫枉过正。也许您对将更改的表单数据保持在组件内部状态直到用户实际提交表单感到满意,并且只有才会调度将发布表单数据的操作,更改Redux状态并将新道具(如成功状态)传递给表单组件。

答案 1 :(得分:3)

是的,这是可能的,特别是当您希望通过不使用spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { String text=spinner.getSelectedItem().toString(); txtview.setText(text); } } @Override public void onNothingSelected(AdapterView<?> parent) { } }); container components来管理应用程序的状态时保持简单。

组件可以管理自己的flux / redux storestate将被指定为从initialState传递的props

考虑以下示例:

parent component

但是,当您的应用程序很复杂时,我仍然建议您将class TodoList extends React.Component { constructor(props) { // Assign todos property to state so that the TodoList component // can self-manage this value without interacting with outside components. this.setState({ todos: props.todos }); } ... addTodo(todoDescription) { this.setState({ todos: this.state.todos.concat[todoDescription] }); } } 组件和view组件分开。