当前位置: 首页 > news >正文

物流网站首页图片wordpress添加多首音乐

物流网站首页图片,wordpress添加多首音乐,wordpress安装,快速注销公司需3天Redux 核心 Redux 介绍 Redux 是javaScript 状态容器,提供可预测化的状态管理 Redux 工作流程 Actions:对象,描述对状态进行怎样的操作 Reducer:函数,操作状态并返回新的状态 Store:存储状态的容器&am…

Redux 核心

Redux 介绍

Redux 是javaScript 状态容器,提供可预测化的状态管理

Redux 工作流程

在这里插入图片描述

Actions:对象,描述对状态进行怎样的操作

Reducer:函数,操作状态并返回新的状态

Store:存储状态的容器,JavaScript对象

View:视图,HTML页面

React 16 使用 Redux

安装

npm install --save redux

创建 store 仓库

src 目录下创建一个 store 文件夹,然后在文件夹下创建一个 index.js 文件

import { legacy_createStore as createStore } from "redux";
import reducer from "./reducer";const store = createStore(reducer, window.__REDUX_DEVTOOLS_EXTENSION__ && window.__REDUX_DEVTOOLS_EXTENSION__()) // 创建数据存储仓库export default store

store 文件夹下创建一个 reducer.js 文件

const defaultstate = {list: [1,2,3,4,5,6],inpuValue: ''
}export default (state = defaultstate) => {return state;
}

在页面中使用

src 目录下创建 TodoList.js 页面

constructor 引入

this.state=store.getState();

使用

this.state.list

通过 dispatch 修改里面的值

store.dispatch({type: 'changeList',value: newList
})

reducer.js 添加对应的方法

const defaultstate = {list: [1,2,3,4,5,6],inpuValue: ''
}export default (state = defaultstate, action) => {switch(action.type) {case "changeList":return {...state,list: action.value}default:return state;}
}

constructor 添加 订阅Redux的状态

this.storeChange = this.storeChange.bind(this) 
store.subscribe(this.storeChange) 

编写storeChange方法

storeChange(){this.setState(store.getState())
}

完整代码

import React, { Component } from 'react';
import store from './store'class TodoList extends Component {constructor(props){super(props)this.state=store.getState();this.storeChange = this.storeChange.bind(this)store.subscribe(this.storeChange) }handleChange(){this.setState({inputValue:this.inputRef.value})}handleAdd() {let newList = this.state.listnewList.push(this.inputRef.value)store.dispatch({type: 'changeList',value: newList})this.setState({inputValue: ''})}handledel(index) {const list = this.state.listlist.splice(index, 1)store.dispatch({type: 'changeList',value: list})}storeChange(){this.setState(store.getState())}render() { return ( <div><div><input ref={(inputRef)=>{this.inputRef=inputRef}} value={this.state.inputValue} onChange={handleChange.bind(this)} /><button onClick={handleAdd.bind(this)}>新增</button></div>{this.state.list.map((item, index) => {return (<div key={index}><p>{item}<span onClick={() => handledel(index).bind(this)}> 删除</span></p></div>)})}</div>);}
}export default TodoList;

React 18 使用 Redux

安装、创建仓库都与16一样

使用

正常引入,用一个变量接收

import store from './store'
const state = store.getState()

使用的时候 直接state.xxx 就能使用

    const items = state.list.map((item, index) => {return (<div key={index}><p>{item}<span onClick={() => handledel(index)}> 删除</span></p></div>)})

修改

一样通过 dispatch

store.dispatch({type: 'changeList',value: list
})

为了能让页面实时更新,必须手动更新

使用 react自带的 useEffect 方法,通过 subscribe 监测store更新的函数

useEffect(() => {// store.subscribe()是redux提供的,监测store更新的函数store.subscribe(() => {// 当store数据更新后执行 setUpdate() ,组件重新加载,实现界面store数据更新setUpdate({})})})
const [update,setUpdate] = useState({})

完整代码

import React, { useRef, useState, startTransition, useEffect } from 'react';
import store from './store'const TotoList = () => {const inputRef = useRef()const state = store.getState()const [update,setUpdate] = useState({})const [value, setValue] = useState('')const items = state.list.map((item, index) => {return (<div key={index}><p>{item}<span onClick={() => handledel(index)}> 删除</span></p></div>)})const handleChange = () => {startTransition(()=> {setValue(inputRef.current.value)})}const handleAdd = () => {let newList = state.listnewList.push(inputRef.current.value)store.dispatch({type: 'changeList',value: newList})setValue('')}const handledel = (key) => {const list = state.listlist.splice(key, 1)store.dispatch({type: 'changeList',value: list})}useEffect(() => {// store.subscribe()是redux提供的,监测store更新的函数store.subscribe(() => {// 当store数据更新后执行 setUpdate() ,组件重新加载,实现界面store数据更新setUpdate({})})})return (<div><div><input ref={inputRef} value={value} onChange={handleChange} /><button onClick={handleAdd}>新增</button></div>{items}</div>)
}export default TotoList;
http://www.yayakq.cn/news/946501/

相关文章:

  • 做销售网站多少钱杭州画廊网站建设
  • 帮忙建站的公司谷歌网页版
  • 大学生可以做的网站项目免费asp地方门户网站系统
  • 做任务分享赚钱的网站wordpress 删除数据库
  • xampp 做网站企业网站开发背景则么写
  • 建设通类型的网站汕头网站关键词排名
  • 网站注册界面设计莱芜吧百度吧
  • 站长之家字体高清素材视频去哪里找
  • 在哪里可以学做网站营口网站建设公司
  • 荧光字网站广东网页设计
  • 建设网站职业证书查询杭州公司注册多少钱
  • 西安 网站 高端 公司做自媒体的网站有哪些
  • 男女做受网站投资理财网站建设
  • 北京网站建设工作室哪家好网站建设dede
  • 怎样做免费商城网站舆情网站直接打开怎么弄
  • 外国ps修图网站桦甸市建设局网站
  • 前段模板的网站18末年禁止3000部在线
  • 慈溪做网站wordpress页面设置方法
  • 怎么做网站弹出公告隆昌市住房和城乡建设厅网站
  • 连锁销售公司网站的建设方案网络管理系统密码
  • 门户网站的特点及优势仿牌网站
  • 温州建设网站制作wordpress 验证账号
  • 山东省建设工程执业资格中心网站职业生涯规划大赛策划书
  • 成为网站有哪些网址?wordpress 修改后台登陆名字
  • 销售网站免费模板有没有做京东客好的网站推荐
  • wordpress无法访问站点wordpress进后台慢
  • 宁波市市建设法规颁发网站航空港建设局网站
  • 做公司网站的必要性西安池乐科技网页设计
  • 韩国家具网站模板备案查询工信部网址查询
  • 渝中网站建设宁波甬晟园林建设有限公司网站