IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> react-redux的使用 -> 正文阅读

[JavaScript知识库]react-redux的使用

以一个例子来说明,页面上有一个初始值 10? ?当我点击 add的时候,给这个值加5 ‘

当点击 asyncAdd的时候,在1秒钟后 加 5

? ? ? ??

1.划分目录结构

srccontainercontainerCount
reduxactionaction.js
reducercount.js
store.js
app.jsx
index.js

表格里画红线的 表示当前的文件夹 目前只是一个 是为 我们创建的这个count容器服务的 ,但以后如果有其他的? 还是有可能再新增的

container是一个包含了所有的容器组件的文件夹? reducer是一个包含了所有的容器任务的文件夹

action.js里是集合了所有的任务的名字

? ? ? ? action.js的内容

export const add = data => ({type:'add',data})

export const asyncAdd = (data,time) => {
        return dispatch => {
            setTimeout(() => {
                dispatch(add(data))
            },time)
        }
    }

? ? ? ? ?count.js

const initValue = 10
export default function countReducer (preState = initValue,action){
    const {data,type} = action

    if(type === 'add'){
        return preState + data
    }else {
        return initValue
    }     
}

store.js的内容

// 4个引入  一个导出
import {createStore , applyMiddleware} from 'redux' //导出一个库函数
import thunk from 'redux-thunk'        //引入支持异步的插件
import CountReducer from './reducer/count'    // 引入容器任务
import {composeWithDevTools} from 'redux-devtools-extension' //引入调试工具



// 导出 用于让 容器组件连接的库函数
export const 
  countStore = 
    createStore(countReducer,composeWithDevTools(applyMiddleware(thunk)))


//后面可能还会到处其他的库函数

container文件夹里放的都是一些容器组件 比如containerCounter.jsx就是一个容器组件 他的作用是连接UI 和 数据?

containerCount.jsx的内容

//2个引入 
import {connect} from 'react-redux'
import {add,asyncAdd} from '../redux/action/action' //引入任务名字


import React,{Component} from 'react'

class containerCount extends Component {
        add = data => {this.props.add(data)}
        asyncAdd = (data,time) => {this.props.asyncAdd(data,time)}
        
        render(){
            return (
                <div>
                    <h1>{this.props.count}</h1> // 这里就是那个页面上的10
                    <p onClick = { () => {this.add(5)}}>add</p>
                    <p onClick = { () => {this.asyncAdd(5,1000)}}>asyncAdd</p>
                </div>
            )
        }


   }


const mapStateToProps = (state,ownProps) => {
        return {count:state} 
   }
let o = {
    'add':add,
    'asyncAdd':asyncAdd
}

//导出容器组件
export default connect(mapStateToProps,o)(containerCount)

再到app.jsx中引入这个容器组件

import React, { Component } from 'react'
import CountainerCount from './container/countainerCount'
export default class App extends Component {
? ? render() {
? ? ? ? return (
? ? ? ? ? ? <div>
? ? ? ? ? ? ? ? <CountainerCount/>
? ? ? ? ? ? </div>
? ? ? ? )
? ? }
}

最后再到 index.js中配置一下

import React from "react";
import ReactDOM from "react-dom";
import App from "./App";

// 2引入
import {Provider} from 'react-redux'

// 假设 store中还导出了一个 countStore2
import {countStore,countStore2} from './redux/store'





ReactDOM.render(
<Provider store = {countStore,countStore2}>
? ? <App />
</Provider> 


, document.querySelector("#root"));

到这之后? 就能实现上面的功能了

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-12-24 18:23:15  更:2021-12-24 18:24:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 10:27:11-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码