You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
杨树明
fc766e206c
|
5 years ago | |
---|---|---|
.. | ||
actions | 5 years ago | |
reducers | 5 years ago | |
stores | 5 years ago | |
README.md | 5 years ago |
README.md
actions 文件下文件的配置
actionTypes.js
此文件指定所有请求的action类型, 类型名统一用大写形式表示
const types = {
ADD_TODO: 'ADD_TODO'
}
export default types;
testActions.js
此文件针对每一个模块指定 action 方法, 最终通过 index.js 文件统一导出
import types from './actionTypes';
export default function toggleTodo() {
return {
type: types.ADD_TODO
}
}
index.js
此文件为默认的导出文件, 里边包含所有指定的其它 actions 文件
import toggleTodo from './testAction.js';
export default {
toggleTodo
}
reducers 文件下文件配置
testReducer.js
修改state值的唯一方式, 根据 action 类型打开对应的 reducer
import types from '../actions/actionTypes';
const initialState = { // 指定状态
count: 0
};
const testReducer = (state = initialState, action) => {
switch (action.type) {
case types.ADD_TODO:
return {
...state,
count: state.count + 1
};
default:
return state;
}
}
export default testReducer;
stores 文件配置
import { createStore } from 'redux';
import rootReducer from '../reducers';
const configureStore = () => createStore(rootReducer);
export default configureStore;
使用
import React from 'react';
import { Provider } from 'react-redux';
import DeveloperHome from './DeveloperHome';
// import store from '../../redux/stors/configureStore';
import configureStore from '../../redux/stores/configureStore'
const store = configureStore();
const App = () => {
return (
<Provider store={store}>
<DeveloperHome />
</Provider>
);
}
export default App;
import React, { PureComponent, Fragment } from 'react';
import { connect } from 'react-redux';
import actions from '../../redux/actions';
class DeveloperHome extends PureComponent {
render () {
const { testReducer, handleClick } = this.props;
return (
<Fragment>
<h2> Developer Home, { testReducer.count } </h2>
<button onClick={() => handleClick() }>add</button>
</Fragment>
);
}
}
/**
* @param {*} state store
* @param {*} ownProps DeveloperHome 中的 props
*/
const mapStateToProps = (state, ownProps) => {
return {
testReducer: state.testReducer
};
}
const mapDispatchToProps = (dispatch) => {
return {
handleClick: () => dispatch(actions.toggleTodo())
}
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(DeveloperHome);