React-5.3 Redux -- 使用react-redux

一. connect

1.安装

npm i react-redux

2.文件代码示例

1). store文件夹:创建空仓库
index.js – 总控仓库
import { createStore,combineReducers } from "redux";
import data from "./reducer";

// export default createStore(data);
export default createStore(combineReducers({data}));
//这里的例子就一个纯函数,所以使用combineReducers与否都可,当数据繁杂需要合并时使用
reducer.js – 管理员(如果多则可换成文件夹,最后合并并导出)
// 导出到 index.js/store 来建立一个空仓库

function data(state={
    name:'微信',
    age:10
},action){

    switch(action.type){
        case 'edit_name':
            return{
                ...state,
                name:action.name
            }
    }

    return state;
}

export default data;
2). index.js:与视图产生关联
  • 在入口文件引入Provider,并把App包裹起来
  • 然后记得传属性!!!传一个store的属性!!!
import React from 'react';
import ReactDOM from 'react-dom';
import App from './App';
import {Provider} from "react-redux"
import store from './store';

ReactDOM.render(
  // 记得传仓库!!!带上属性
  <Provider store={store}>
    <App />
  </Provider>,
  document.getElementById('root')
);
3). App.js
import React from 'react';
import Inner from './Inner';

function App() {
  return (
    <div>
      哈哈
      <Inner info={"组件通信"} />
    </div>
  );
}
export default App;
4). 组件 inner.js(使用connect)

使用 connec

  • 目的:让组件拿到仓库里的数据 !!!
  • 在哪个组件中需要使用 redux 中的数据,就在哪个组件中调用
  • connect ( state的处理函数 ) ( 组件 )
    • connect()():connect()返回一个函数体(包含着数据),后面加个括号继续调用,第二个括号里写要使用的组件
    • state的处理函数:(state,props)=>{ return state.data; }
      其中:state里的props为可选项 ,return的是要 传给组件数据
import React,{Fragment} from "react";
import { connect } from "react-redux";

function Inner(props){
    console.log(props); //接收不仅有传过来的数据,也包含有dispatch,修改方式!!!下面return state时,这里接收到{data:{...},dispatch:f}
	//解构出来:
    let {name,age,dispatch} = props;
    return(
        <Fragment>
            <p>name:{name}</p>
            <p>age:{age}</p>

            <button onClick={()=>{
                dispatch({
                    type:"edit_name",
                    name:"小朋友你是否有很多问号"
                })
            }}>修改</button>
        </Fragment>
    )
    
}

// 简单粗暴来讲:近似看作就是把仓库的数据,给第二个小括号内的组件
export default connect((state,props)=>{
    console.log(state); // {data:{ data:{name:"微信", age:10} }}
    return state.data; //这是固定写法,无论reducer.js里导出的名字是什么
})(Inner)
// 总结:
// 前面是一个回调函数,会把仓库的值返回出来;
// 然后返回在第二个函数执行的传入的这个组件当中,以此来达成一个目的,让组件拿到仓库里的数据
// 所以想让哪个组件拿到仓库里的数据,就让哪个组件传入进来

在这里插入图片描述

点击修改按钮:
在这里插入图片描述

二. hooks

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值