【React】React-redux多组件间的状态传递

本文详细介绍了如何在React应用中使用Redux进行状态管理,包括如何创建Person和Count组件的容器,如何通过connect函数连接组件与store,以及如何使用reducer处理action以更新状态。重点讲解了Redux的核心概念,如action、reducer和store的作用以及它们在组件间的数据共享中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

效果(部分完整代码在最底部):在这里插入图片描述

  1. 编写 Person 组件
    上面的 Count 组件,已经在前面几篇写过了,也可以直接翻到最底部看

首先我们需要在 containers 文件夹下编写 Person 组件的容器组件
首先我们需要编写 index.jsx 文件,在这个文件里面编写 Person 组件的 UI 组件,并使用 connect 函数将它包装,映射它的状态和方法

编写 UI 组件架构

<div>
    <h2>我是 Person 组件,上方组件求和为:{
   this.props.countAll}</h2>
    <input ref={
   c => this.nameNode = c} type="text" placeholder="输入名字" />
    <input ref={
   c => this.ageNode = c} type="text" placeholder="输入年龄" />
    <button onClick={
   this.addPerson}>添加</button>
    <ul>
        {
   
            this.props.persons.map((p) => {
   
                return <li key={
   p.id}> {
   p.name}--{
   p.age}</li>
            })
        }
    </ul>
</div>

我们可以看到这里采用了 ref 来获取到当前事件触发的节点,并通过 this.addPerson 的方式给按钮绑定了一个点击事件

编写点击事件回调

addPerson = () => {
   
    const name = this.nameNode.value
    const age = this.ageNode.value
    const personObj = {
    id: nanoid(), name, age }
    this.props.add(personObj)
    this.nameNode.value = ''
    this.ageNode.value = ''
}

在这里我们需要处理输入框中的数据,并且将这些数据用于创建一个 action 对象,传递给 store 进行状态的更新

在这里我们需要回顾的是,这里我们使用了一个 nanoid 库,这个库我们之前也有使用过

下载,引入,暴露

import {
    nanoid } from 'nanoid'

暴露的 nanoid 是一个函数,我们每一次调用时,都会返回一个不重复的数,用于确保 id 的唯一性,同时在后面的 map 遍历的过程中,我们将 id 作为了 key 值,这样也确保了 key 的唯一性,关于 key 的作用,可以看看 diffing 算法的文章

状态管理
在这里我们需要非常熟练的采用 this.props.add 的方式来更新状态

那么它是如何实现状态更新的呢?我们来看看

在我们调用 connect 函数时,我们第一次调用时传入的第二个参数,就是用于传递方法的,我们传递了一个 add 方法

export default connect(
    state => ({
    persons: state.person, countAll: state.count }),//映射状态
    {
    add: createAddPersonAction }
)(Person);

它的原词是:mapDispatchToProps

我的理解是,传入的东西会被映射映射成 props 对象下的方法&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值