redux的使用
cnpm install redux -S
import { createStore } from 'redux'
const counterReducer =(store = 0;action)=>{
switch (action.type){
case 'add' :
return state + 1;
break;
case 'minus':
return state - 1;
break;
default :
return state;
break;
}
}
const store=createStore( createStore )
export default store;
使用 Redirect.js
import React from 'react';
import store from '../store'
export default function Redirect(){
return (
<div>
<p>{store.getState()}</p>
<button onClick={()=> store.dispatch({type: 'add'})}></button>
</div>
)
}
订阅更新
store.subscribe(()=>{
ReactDOM.render (<APP />,document.getElementById("root"))
})
react-redux
cnpm install react-redux -S
APP.js
import { Provider } from 'react-redux'
<Provider store={ store }>
<APP />
</Provider>
使用
import { connect } from 'react-redux'
const mapStateToProps = state => ({num: state});
const mapDispatchToProps = {
add: ()=>({
type: 'add'
}),
minus: () =>({
type: 'minus'
})
}
function ReduxText({num, add, minus}){
return (
<p>{ num }</p>
<button onClick={ add }></button>
)
}
export default connect(
mapStateToProps,
mapDispatchToProps
)(ReduxText)
@connect(
mapStateToProps,
mapDispatchToProps
)
class ReduxText extends Component {
render (){
const { num , add, minus } = this.props;
return (
<div>
<p>{ num }</p>
</div>
)
}
}
export default ReduxText;
异步操作 redux-thunk
cnpm install redux-thunk -S
在 store.js 中应用中间件
import { createStore, applyMiddleware } from 'redux'
import logger from 'redux-logger';
import thunk from 'redux-thunk';
const counterReducer =(store = 0;action)=>{
switch (action.type){
case 'add' :
return state + 1;
break;
case 'minus':
return state - 1;
break;
default :
return state;
break;
}
}
const store=createStore( createStore ,applyMiddleware(logger,thunk))
export default store;
const mapDispatchToProps = {
add: ()=>({ type : 'add'}),
asyncAdd: ()=> dispatch =>{
setTimeout(()=>{
dispatch({ type: "add" })
},1000)
}
}
store 的抽离
export const counterReducer =(store = 0;action)=>{
switch (action.type){
case 'add' :
return state + 1;
break;
case 'minus':
return state - 1;
break;
default :
return state;
break;
}
}
export const add = () => ({type: 'add'})
export const asyncAdd = () => dispatch =>{
setTimeout(() => {
dispatch({ type : 'add'});
},1500)
}
import { createStore, applyMiddleware, combineReducers } from 'redux'
import logger from 'redux-logger';
import thunk from 'redux-thunk';
import { index } from './index'
const store = createStore(
combineReducers({index:index}),
applyMiddleware(logger, thunk))
export default store;
const mapStateToProps = state => ({ num: state.index })