使用React Redux实现React组件之间的数据共享

 更新时间:2024年03月22日 09:54:50   作者:JudithHuang  
在复杂的React应用中,组件之间的数据共享是必不可少的,为了解决这个问题,可以使用React Redux来管理应用的状态,并实现组件之间的数据共享,在本文中,我们将介绍如何使用React Redux实现Count和Person组件之间的数据共享,需要的朋友可以参考下

实现React组件之间的数据共享:使用React Redux

在复杂的React应用中,组件之间的数据共享是必不可少的。为了解决这个问题,可以使用React Redux来管理应用的状态,并实现组件之间的数据共享。在本文中,我们将介绍如何使用React Redux实现Count和Person组件之间的数据共享。

1. 准备工作

首先,我们需要安装React Redux和相关的依赖:

npm install react-redux redux redux-thunk --save

2. 创建Redux Store

Redux Store是一个存储应用程序状态的容器,它提供了一种统一管理状态的机制。在创建Redux Store之前,我们需要先定义应用程序的状态结构,并编写相应的Reducer函数来处理状态的变化。接下来,让我们一步步创建Redux Store。

2.1. 定义状态结构

在开始创建Redux Store之前,我们需要定义应用程序的状态结构。在这个示例中,我们的应用程序包含两个主要的状态:count和persons。count状态用于存储计数器的值,而persons状态用于存储人员信息列表。我们可以在reducers/count.js和reducers/person.js中定义这些状态的初始值和处理方法。

// reducers/count.js
import { COUNT_ADD } from '../constant';

const initState = 0;

export default function CountReducer(preState = initState, action) {
  const { type, data } = action;
  switch (type) {
    case COUNT_ADD:
      const { value1, value2 } = data;
      return value1 + value2;
    default:
      return preState;
  }
}

// reducers/person.js
import { PERSON_ADD } from '../constant';

const initState = [];

export default function PersonReducer(preState = initState, action) {
  const { type, data } = action;
  switch (type) {
    case PERSON_ADD:
      return [data, ...preState];
    default:
      return preState;
  }
}

2.2. 创建Redux Store

现在我们可以开始创建Redux Store了。Redux提供了一个createStore函数用于创建Redux Store,我们需要将应用程序的所有Reducer函数传入createStore中,并可选地使用applyMiddleware函数来应用中间件。

// store.js
import { createStore, applyMiddleware, combineReducers } from 'redux';
import thunk from 'redux-thunk';

import countReducer from './reducers/count';
import personReducer from './reducers/person';

// 组合所有的Reducer
const rootReducer = combineReducers({
  count: countReducer,
  persons: personReducer,
});

// 创建Redux Store,并应用中间件
const store = createStore(rootReducer, applyMiddleware(thunk));

export default store;

通过上述步骤,我们成功创建了Redux Store,并且应用了中间件。现在我们可以在应用程序中使用这个Redux Store来存储和管理应用程序的状态了。

3. 创建Count组件

Count组件用于展示一个加法计算器,并实现与Redux Store的连接。我们使用connect函数将Count组件与Redux Store连接起来,并实现数据共享:

// containers/Count/index.jsx
import { connect } from 'react-redux';
import React, { Component } from 'react';
import { InputNumber, Button } from 'antd';

import { createAsyncAddAction } from '../../actions/count';

class CountUI extends Component {
  state = {
    value1: 0,
    value2: 0,
  }

  add = () => {
    const { value1, value2 } = this.state;
    this.props.add({ value1, value2 });
  }

  render() {
    const { value1, value2 } = this.state;
    const { total, persons } = this.props;

    return (
      <div>
        <h2>我是Count组件,Person组件的录入人数是:{persons.length}</h2>
        <InputNumber value={value1} onChange={ val => this.setState({ value1: val }) } /> +
        <InputNumber value={value2} onChange={ val => this.setState({ value2: val }) } />
        <Button type="link" onClick={this.add}>=</Button>
        {total}
      </div>
    )
  }
}

export default connect(
  state => ({ total: state.count, persons: state.persons }),
  {
    add: createAsyncAddAction,
  }
)(CountUI);

4. 创建Person组件

Person组件用于展示一个人员信息表格,并实现与Redux Store的连接。我们同样使用connect函数将Person组件与Redux Store连接起来,实现数据共享:

// containers/Person/index.jsx
import React, { Component } from 'react';
import { Input, Button, Table } from 'antd';
import { nanoid } from 'nanoid';
import { connect } from 'react-redux';

import { createAddAction } from '../../actions/person';

const columns = [
  {
    title: '姓名',
    dataIndex: 'name',
    key: 'name',
  },
  {
    title: '年龄',
    dataIndex: 'age',
    key: 'age',
  },
];

class Person extends Component {
  state = {
    name: '',
    age: '',
  }

  add = () => {
    const { name, age } = this.state;
    const person = { key: nanoid(), name, age };
    this.props.add(person);
    this.setState({ name: '', age: '' });
  }

  render() {
    const { persons, total } = this.props;
    const { name, age } = this.state;

    return (
      <div>
        <h2>我是Person组件,Count组件的求和结果是{total}</h2>
        <Input
          placeholder="姓名"
          value={name}
          onChange={e => this.setState({ name: e.target.value })}
        />
        <Input
          placeholder="年龄"
          value={age}
          onChange={e => this.setState({ age: e.target.value })}
        />
        <Button onClick={this.add} type="primary">添加</Button>
        <Table dataSource={persons} columns={columns} />
      </div>
    )
  }
}

export default connect(
  state => ({ persons: state.persons, total: state.count }),
  {
    add: createAddAction,
  }
)(Person);

5. 整合React组件

最后,我们在应用的入口文件中将Count和Person组件放置在Provider组件中,以便整个应用可以访问Redux Store中的状态:

// App.jsx
import React, { Component } from 'react';
import { Provider } from 'react-redux';

import store from './store';
import Count from './containers/Count';
import Person from './containers/Person';

export default class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <Count />
        <hr />
        <Person />
      </Provider>
    )
  }
}

结语

通过以上步骤,我们成功实现了React组件之间的数据共享。Count组件和Person组件通过Redux Store共享数据,实现了状态的统一管理和更新。这种基于React Redux的数据管理方式,能够有效地提高应用的可维护性和扩展性,是构建复杂应用的一种有效方式。

参考

以上就是使用React Redux实现React组件之间的数据共享的详细内容,更多关于React Redux组件数据共享的资料请关注脚本之家其它相关文章!

相关文章

  • React中refs的一些常见用法汇总

    React中refs的一些常见用法汇总

    Refs是一个 获取 DOM节点或React元素实例的工具,在React中Refs 提供了一种方式,允许用户访问DOM 节点或者在render方法中创建的React元素,这篇文章主要给大家介绍了关于React中refs的一些常见用法,需要的朋友可以参考下
    2021-07-07
  • webpack手动配置React开发环境的步骤

    webpack手动配置React开发环境的步骤

    本篇文章主要介绍了webpack手动配置React开发环境的步骤,webpack手动配置一个独立的React开发环境, 开发环境完成后, 支持自动构建, 自动刷新, sass语法 等功能...感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 详解React setState数据更新机制

    详解React setState数据更新机制

    这篇文章主要介绍了React setState数据更新机制的相关资料,帮助大家更好的理解和学习使用React框架,感兴趣的朋友可以了解下
    2021-04-04
  • React内存泄漏的常见原因及避免策略

    React内存泄漏的常见原因及避免策略

    内存泄漏是指程序中分配的内存未能正确释放,导致内存占用不断增加,最终可能影响应用性能甚至崩溃,在React中,内存泄漏常发生于组件卸载后,本文将详细介绍内存泄漏在React中的常见原因及避免策略,需要的朋友可以参考下
    2025-03-03
  • react 父组件与子组件之间的值传递的方法

    react 父组件与子组件之间的值传递的方法

    本篇文章主要介绍了react 父组件与子组件之间的值传递的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • JavaScript中React面向组件编程(上)

    JavaScript中React面向组件编程(上)

    本文主要介绍了React组件中默认封装了很多属性,有的是提供给开发者操作的,其中有三个属性非常重要:state、props、refs。感兴趣的小伙伴可以参考阅读
    2023-03-03
  • React之虚拟DOM的实现原理

    React之虚拟DOM的实现原理

    这篇文章主要介绍了React之虚拟DOM的实现原理分析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-01-01
  • create-react-app修改为多页面支持的方法

    create-react-app修改为多页面支持的方法

    本篇文章主要介绍了create-react-app修改为多页面支持的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • 一文搞懂redux在react中的初步用法

    一文搞懂redux在react中的初步用法

    Redux是JavaScript状态容器,提供可预测化的状态管理,今天通过本文给大家分享redux在react中使用及配置redux到react项目中的方法,感兴趣的朋友跟随小编一起看看吧
    2021-06-06
  • 详解React中错误边界的原理实现与应用

    详解React中错误边界的原理实现与应用

    在React中,错误边界是一种特殊的组件,用于捕获其子组件树中发生的JavaScript错误,并防止这些错误冒泡至更高层,导致整个应用崩溃,下面我们就来看看它的具体应用吧
    2024-03-03

最新评论