使用 redux 和 react 制作单页应用程序,首先要做的是什么?先用redux创建我的状态逻辑还是让所有组件先反应?
问问题
295 次
3 回答
1
你会犯一个错误,先做所有组件或先做所有状态。
只需从 1 个组件开始并将其连接到 redux。不要编写还不需要的状态或组件。
最好从必要的代码开始,如果需要更改,则修改/重构该代码。
当您的假设不正确并且事实证明您必须重写预先编写的组件时,预优化会很痛苦。在项目期间,您总是会发现更好的方法来做事,因此您当时拥有的组件和/或减速器越多,您的返工就越多。
于 2016-02-28T15:06:53.790 回答
1
可能要做的第一件事就是建立你的减速器功能。这是一个例子。我正在使用 ES6 示例。
const INCREMENT = 'redux-example/counter/INCREMENT';
const initialState = {
count: 0
};
export default function reducer(state = initialState, action = {}) {
switch (action.type) {
case INCREMENT:
const {count} = state;
return {
count: count + 1
};
default:
return state;
}
}
export function increment() {
return {
type: INCREMENT
};
}
然后你必须创建一个组件:
import React, {Component, PropTypes} from 'react';
import {connectMultireducer} from 'multireducer';
import {increment} from 'redux/modules/counter';
@connectMultireducer(
(key, state) => ({count: state.multireducer[key].count}),
{increment}
)
export default class CounterButton extends Component {
static propTypes = {
count: PropTypes.number,
increment: PropTypes.func.isRequired,
className: PropTypes.string
}
props = {
className: ''
}
render() {
const {count, increment} = this.props; // eslint-disable-line no-shadow
let {className} = this.props;
className += ' btn btn-default';
return (
<button className={className} onClick={increment}>
You have clicked me {count} time{count === 1 ? '' : 's'}.
</button>
);
}
}
在您的组件中,您可以将 reducer 状态和操作连接到您的组件,然后将它们包装到一个容器中并将它们链接到 HTML。
希望这可以帮助。
于 2016-02-28T04:58:05.033 回答
1
我认为这在很大程度上取决于您是否更好地了解您的数据或您的 UI。我会写出一个容器组件,然后将所有数据作为状态传递给它,然后将其映射到道具。从那里你可以决定哪些组件需要状态树的哪一部分。然后,您可以通过跟踪数据来进行推理组件设计。
这是我草拟的一个简单示例:https ://github.com/matthewkturner/redux-simple-boilerplate
于 2016-02-28T08:11:31.567 回答