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

江西网站优化市场营销是做什么的

江西网站优化,市场营销是做什么的,医院做网站备案都需要什么,wordpress做旅游网站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.yidumall.com/news/43382.html

相关文章:

  • 营销型高端网站建设网站打开速度优化
  • 成都市郫都区沈阳专业seo关键词优化
  • 理解电子商务网站建设与管理seo查询工具
  • 个人 申请域名做网站宁波seo推广服务
  • 怎么做平台网站应用市场
  • 广告设计制作合同模板seo是什么职业做什么的
  • 包头网站优化百度招聘平台
  • WordPress插件框架站长seo工具
  • 论述网站建设及运营流程微商怎么做推广加好友
  • 开发帮官方网站2023年10月疫情恢复
  • c 网站开发百度搜索下载app
  • 音乐网站 源码站长工具端口扫描
  • 网站分析流程如何用手机免费创建网站
  • wordpress建哪些网站seo排名是什么
  • vs和sql怎么做网站24小时自助下单平台网站便宜
  • 音乐网站如何做西安百度seo排名
  • cpa推广做网站360推广和百度推广哪个好
  • 网站建设与制作与维护ppt网站维护合同
  • 郑州网站建设案例百度推广怎么弄
  • 酒水在什么网站做推广好it培训学校哪家好
  • wordpress网站很慢开发制作app软件
  • 莱芜人才网最新招聘深圳网站优化软件
  • wordpress bbpress 主题搜索引擎优化的定义
  • 网站设计步骤毕业论文域名服务器ip查询网站
  • 手机网站开发公司电话福州seo网络推广
  • 怎样自己做公司网站seo自动推广软件
  • 洛可可设计公司薪资搜索引擎优化seo公司
  • 滁州seo优化武汉seo网站推广
  • 营销型网站建设 合肥成都网站建设方案优化
  • 做搜狗网站优化首网络广告的计费方式