redux+react-cli创建数据仓库

介绍

Redux 是 JavaScript 状态容器,提供可预测化的状态管理。

安装
npm i redux -S
npm i redux-react -S
要引用的模块及作用
import { combineReducers,createStore  } from 'redux'
import {connect,Provider} from 'react-redux'

代码片段及解释

createStore

用于创建一个redux仓库
let redux1 = function(state = {name:'张山',age:123},action){
// action是一个 对象 作用是当state对象中的发生改变就会再次执行这个函数
// action是组件改变仓库中的属性 注: 这里是state中的内容 在组件中是props
// 因为props是只读属性所以要这样修改 也可以实现数据的共享
// action:{type:"算是一种标记,用来标记那个值被修改然后通过switch来确认要执行的内容",被修改过后的值}
 		return state
 		// state就是仓库中的数据
}
let store = createStore(redux1)
成功创建一个仓库

Provider

ReactDOM.render(<Provider store={store} ><App age={1} /></Provider>, document.getElementById('root'));
// 将App组件和该仓库绑定到一起
// 如果 App自身上绑定的props和仓库中state有相同的属性名就会发生冲突,仓库中的state会覆盖组件自身上绑定的props的内容
// 解决上述问题的方法
// 在connect中 connect()这个方法的参数是一个回调函数
// connect((state,props)=>{
//  	state是仓库中内容
//      props是自身绑定的内容
//  	retrun state 这里是将state 这个对象放到 组件this.props的这个属性上
//		所以才会有冲突
//    	解决方法 
//		return {...state,age:props.age}
// })

connect

import React,{Component} from 'react';
class App extends Component {
  constructor (){
        super()
        this.state={
            name:'12'
        }
    }
 async componentDidMount(){
   // var na = await axios.get('/aaa.json')
   // console.log(na)
     console.log("12",this.state)
 }
 cha(){
     this.props.setName("zhangshanysdnhsj")
     // 修改props中的属性要使用这种方法
     // props是只读属性
     // 触发connect()方法中的第二个参数对象中对应的方法
     // 然后回触发createStore() 中的参数的那个函数 重写加载一次仓库通过action属性来实现一系列操作
 }
 add(){
    this.props.addAge(7)
 }
  render(){
      return  (
          <div className="App">
              {this.props.name},{this.props.age}
              <Children />
              <button onClick={()=>{this.cha()}}>改名</button>
              <button onClick={()=>{this.add()}}>add</button>
          </div>
      );
  }
}
export default connect((state,props)=>{
    // 使用redux创建的store仓库对象
    // 自身上绑定的props中的属性
    // 每次修改属性 这里的内容都会执行
    console.log(props)
    console.log(state);
    return {
        ...state.user,
    }
},{  // 自己定义的一些用来改变props的属性的方法的对象
	
    setName(name){
        console.log(name)
        return {
            type:SET_NAME, // type属性是必须的 没有会报错
            name
        }
    },
    addAge(age){
        return {
            type:ADD_AGE,
            age
        }
    }
})(App);
实现App组件和仓库的链接

combineReducers

用来将多个仓库绑定到一起
import user from './reduce1'
import compeny from './reduce2'
// 假如上面是我引入的两个仓库 (在被createStore()前的一个函数)
let arr = combineReducers({ // 这样就会把两个仓库绑定到一起
    user,
    compeny
})
ReactDOM.render(<Provider store={arr} ><App age={1} /></Provider>, document.getElementById('root'));
这样就绑定上去了
但是使用的使用是要注意
像这样
connect((state,props)=>{
    return state.user
})(App)
connect((state,props)=>{
    return state.compeny
})(Children)
要引入每个组件对应的仓库
当然也可以引用同一个来实现数据的共享
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值