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知识库 -> 1 redux初探、用react开发数值增值案例 -> 正文阅读

[JavaScript知识库]1 redux初探、用react开发数值增值案例

含义

  • Redux是专门用作状态管理的js库,不是react插件库
  • 可以用在react、angular、vue等项目中
  • 能集中式管理react应用中多个组件共享的状态

使用

npx create-react-app redux1
cnpm install redux -S

关键字

  • store
  • reducer
  • action
  • subscribe

案例

1. 创建store、并传入reducer 
import { createStore } from 'redux'
import { counter } from './redux/reducers'
const store = createStore(counter)
2. 使用dispatch
store.dispatch({
	type: '', // action的名字 
	data: '', // 传给action的参数
})
3. reducer里处理数据
function counter(state = 0, action) {
    const { type, data } = action
    // 结构出dispatch的action type和参数,返回state
}
4. 监听state,触发更新
store.getState() // 获取最新的state
store.subscribe(render) // 触发ReactDOM.render
  • index.js 入口文件
import ReactDOM from 'react-dom'
import App from './App'
import { createStore } from 'redux'
import { counter } from './redux/reducers'
const store = createStore(counter)

// state监听,变化时执行传入的方法
store.subscribe(render)
function render() {
    ReactDOM.render(
        <App store={store} />,
        document.getElementById('root')
    )
}
render()
  • reducers.js
export function counter(state = 0, action) {
    const { type, data } = action
    console.log('reduce 触发了方法', type)
    console.log('reduce 接收参数', data)
    switch (type) {
        case 'add':
            return state + data
        case 'minus':
            return state - data
        case 'add_odd':
            if (data % 2 !== 0) {
                return state + data
            }
        case 'add_delay':
            // 这里实现不了延时返回,可以拿到外面调用方法处去做延时调用
            setTimeout(() => {
                return state + data
            }, 1000)
        default:
            return state
    }
}
  • action.js
export function add (param){
    return{
        type: 'add', // 方法名
        data: param // 对应参数
    }
}
export function minus (param){
    return{
        type: 'minus',
        data: param
    }
}
export function add_odd (param){
    return{
        type: 'add_odd',
        data: param
    }
}
export function add_delay (param){
    return{
        type: 'add_delay',
        data: param
    }
}
  • App.jsx UI
import React, { Component, createRef } from 'react'
import * as actions from './redux/action'

export default class App extends Component {
    constructor(props) {
        super(props)
        this.selectRef = createRef()
    }
    compute = (method) => {
        const selectDom = this.selectRef.current,
            selectVal = Number(selectDom.value),
            store = this.props.store;
        console.log('app store/method', store, method)
        store.dispatch(actions[method](selectVal))
    }
    render() {
        const count = this.props.store.getState()
        console.log('重新render了', count)
        return (
            <>
                <h1>数值:{count}</h1>
                <select ref={this.selectRef}>
                    <option value="1">1</option>
                    <option value="2">2</option>
                    <option value="3">3</option>
                </select>&nbsp;
                <button onClick={() => this.compute('add')}>+</button>&nbsp;
                <button onClick={() => this.compute('minus')}>-</button>&nbsp;
                <button onClick={() => this.compute('add_odd')}>奇数加</button>&nbsp;
                <button onClick={() => this.compute('add_delay')}>延迟加</button>
            </>
        )
    }
}

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-10-17 11:54:34  更:2021-10-17 11:56:34 
 
开发: 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/23 23:56:45-

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