2.3.3.react-redux的一个简单案例

0.前提:

reudx只是单纯的对数据进行管理,数据与组件之间的交互,还需要手动地添加,所以,就有了react-redux的开始。

相关依赖已经再redux的案例中下载好了。https://blog.csdn.net/weixin_47870554/article/details/106743677

react-redux中的组件分为两类,一类是只处理数据和业务逻辑的容器,一类是只负责显示UI显示。

1.简单的demo:

代码如下:

import React from 'react'
import ReactDOM from 'react-dom'
import { createStore } from 'redux'
import { Provider, connect } from 'react-redux'

const reducer = (state, action) => {
	return {
		name: action.name
	};
}
const store = createStore(reducer);

function mapStateToProps(state){
	return {
		name: state.name,
	}
}
function mapDispatchToProps(dispatch){
	return {
		changeName: ()=>{
			const name = prompt('你要改什么名字啊?');
			dispatch({
				type: 'name',
				name: name
			})
		},
	}
}
class Hello extends React.Component {
	render() {
		const { changeName, name='?' } = this.props;
		return <h1 onClick={changeName}>hello, {name}</h1>
	}
}
Hello = connect(mapStateToProps, mapDispatchToProps)(Hello);

ReactDOM.render(
	<Provider store={store}>
		<Hello />
	</Provider>,
	document.body);

演示结果:

2.代码简单的解释:

之前就提过,store有初始化配置reducer函数、传递action触发reducer改变state、取出state三个步骤流程。

这个简单demo中redux相关组件,也类似这三个流程。

  • 初始化配置reducer
const reducer = (state, action) => {
	return {
		name: action.name
	};
}
const store = createStore(reducer);

这里有mapStateToProps、mapDispatchToProps两个函数:

  • mapDispatchToProps会传入dispatch函数作为参数,对应的是传递action触发reducer改变state这个步骤,返回的也是一个对象,对象的属性与传入react组件的props中的属性相对应;
  • mapStateToProps会传入参数state,对应的是取出state,不过返回的,必须是一个对象,对象的属性与传入react组件的props中的属性相对应;

connect(mapStateToProps, mapDispatchToProps)(Hello):实现将mapDispatchToProps、mapStateToProps与组件绑定,使得传递action的方法,和改变后的states能够作为props的属性传入组件中,对组件进行操作。然后返回一个已经和这两个函数绑定的组件。

function mapStateToProps(state){
	return {
		name: state.name,
	}
}
function mapDispatchToProps(dispatch){
	return {
		changeName: ()=>{
			const name = prompt('你要改什么名字啊?');
			dispatch({
				type: 'name',
				name: name
			})
		},
	}
}
class Hello extends React.Component {
	render() {
		const { changeName, name='?' } = this.props;
		return <h1 onClick={changeName}>hello, {name}</h1>
	}
}
Hello = connect(mapStateToProps, mapDispatchToProps)(Hello);

组件在connect前与connect后的对比:

最后,使用Provider 组件,传入store,使得绑定了connect的组件能够接收到store。实现redux数据管理。

ReactDOM.render(
	<Provider store={store}>
		<Hello />
	</Provider>,
	document.body);

(没有<Provider store={store}>的话,就会找不到store)

从这里也能看出来,react-redux是通过组件的context传达数据的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值