我一直在研究 React 应用程序,并且已经到了需要 Redux 来处理它的某些方面的地步。
在阅读了一堆教程后,我一直在思考如何使我的“更智能”组件“变笨”并将函数移动到我的动作和减速器中。
因此,例如,该应用程序的一个方面更像是待办事项列表样式。
我的一堂课是这样开始的:
export default class ItemList extends React.Component {
constructor() {
super();
this.state = { items: [],
completed: [],
};
this.addItem = this.addItem.bind(this);
this.completeItem = this.completeItem.bind(this);
this.deleteItem = this.deleteItem.bind(this);
}
addItem(e) {
var i = this.state.items;
i.push({
text: this._inputElement.value,
paused: false,
key: Date.now()
});
this.setState({ items: i });
e.preventDefault();
this._inputElement.value = '';
this._inputElement.focus();
}
completeItem(e) {
this.deleteItem(e);
var c = this.state.completed;
c.push({
text: e.target.parentNode.parentNode.getElementsByClassName('item-name')[0].innerHTML,
paused: false,
key: Date.now()
});
this.setState({ completed: c });
}
deleteItem(e) {
var i = this.state.items;
var result = i.filter(function(obj) {
return obj.text !== e.target.parentNode.parentNode.getElementsByClassName('item-name')[0].innerHTML;
});
this.setState({ items: result });
}
// ... more irrelevant code here ...
// there's a function called createTasks that renders individual items
render() {
var listItems = this.state.items.map(this.createTasks);
return <div className="item-list">
<form className="form" onSubmit={this.addItem}>
<input ref={(a) => this._inputElement = a}
placeholder="Add new item"
autoFocus />
<button type="submit"></button>
</form>
{listItems}
</div>;
}
}
所以,正如你所看到的,它的逻辑非常重。我已经开始通过<Provider>
在我的索引文件中添加 a来添加 Redux ,并制作了一个到目前为止相当空的基本 reducers 文件:
import { combineReducers } from 'redux';
const itemList = (state = {}, action) => {
};
// ... other irrelevant reducers
const rootReducer = combineReducers({
itemList,
// ...
});
export default rootReducer;
...而且我已经制作了一个动作文件,其中也没有太多内容。
我一直在努力弄清楚:
- 我见过的大多数操作示例都只返回某种 JSON,我在使用组件可以使用的 JSON 的 reducer 中返回什么?
- 我的组件逻辑有多少是可重用的,还是我应该忘记它?重用尽可能多的代码的最佳方法是什么?