react-redux入门使用

react-redux

demo的git

安装react-redux和redux

yarn add react-redux
yarn add redux

创建store文件夹

store文件夹目录结构

react-redux的provider和connect
配置src/index.js
import React from 'react';
import ReactDOM from 'react-dom';
import TodoList from  './component/TodoList'
import { Provider } from 'react-redux'
import store from './store'

const App=(
    //被Provider包裹的组件都可以获得store里面的state值
    <Provider store={store}>
        <TodoList />
    </Provider>
)
ReactDOM.render(App, document.getElementById('root'));
/store/index
import { createStore } from 'redux'
import reducer from './reducer'

const store = createStore(reducer)

export default store
/store/reducer
import { CHANGE_INPUT,ADD_ITEM } from './actionTypes'
const defaultState = {
    inputValue:'writting',
    list:['1']
}

export default (state = defaultState,action) =>{
    if(action.type === CHANGE_INPUT){
        let newState = JSON.parse(JSON.stringify(state))
        newState.inputValue = action.value
        return newState;
    }
    if(action.type === ADD_ITEM){
        let newState = JSON.parse(JSON.stringify(state))
        newState.list.push(newState.inputValue)
        return newState;
    }
    return state
}
/store/actionCreators
import { CHANGE_INPUT,  ADD_ITEM } from './actionTypes'
//返回对象({})
export const changeInputAction = (value)=>({
    type:CHANGE_INPUT,//type有点标识符的意思
    value
})
export const addItemAction = ()=>({
    type:ADD_ITEM//type有点标识符的意思
})

/store/actionTypes
export const CHANGE_INPUT = 'changeInput'
export const ADD_ITEM = 'addItem'

/comonents/TodoList
import React, { Component,Fragment } from 'react';
import { Input } from 'antd';
import { Button } from 'antd';
import { List } from 'antd';
import { connect } from 'react-redux'
import { changeInputAction,addItemAction } from '../store/actionCreators'
//没有业务流程(constructor),写成方法组件性能更好
class TodoList extends Component {
    render() { 
        //项目优化
        let { inputValue,list,inputChange,addItem } = this.props
        return (
            <Fragment>
                <div style={{marginTop:'20px'}}>
                    <Input 
                        style={{width:'300px',marginRight:'10px'}} 
                        value = {inputValue}
                        onChange = {inputChange}
                    />
                    <Button type="primary" onClick={addItem}>提交</Button>
                </div>
                <div style={{marginTop:'20px'}}>
                    <List
                        size="large"
                        bordered
                        dataSource={list}
                        renderItem={(item,index) => 
                            <List.Item>{item}</List.Item>} 
                        />
                </div>
            </Fragment>
        );
    }
}
//映射关系,把store.state中的inputValue给props中的inputValue
//把store.state中的list给props中的list
const stateToProps = (state)=>{
    return {
        inputValue:state.inputValue,
        list:state.list
    }
}
//映射,this.props.inputChange调用,多个方法return加逗号(,)
const dispatchToProps = (dispatch)=>{
    return {
        inputChange(e){
            let action = changeInputAction(e.target.value)
            dispatch(action)
        },
        addItem(){
            let action = addItemAction()
            dispatch(action)
        }
    }
}

export default connect(stateToProps,dispatchToProps)(TodoList);
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值