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.
educoder/public/react/src/redux/README.md

128 lines
2.7 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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);
````