当前位置:网站首页>函数组件和类组件和dva视图更新问题
函数组件和类组件和dva视图更新问题
2022-08-09 10:03:00 【高桥靓仔】
类组件setState视图更新:
import React from 'react'
export default class ThisSetState extends React.Component {
state = {
num: 1
}
render() {
return <div onClick={() => {
this.setState(() => {
this.state.num = 2
return this.state//新地址的state
})
}}>{this.state.num}</div>
}
}
this.setState的传入的状态是引用变量的话,地址和之前的不一样react才能正常触发更新,但是由于this的不确定性(因为this是调用的时候才确定)这里的this指向新的state,所以也会触发更新。
函数组件setState视图更新:
import React, { Component, useState } from 'react'
const ThisSetState = () => {
const [state, setState] = useState({ num: 1 })
return (
<div onClick={() => {
setState(() => {
state.num = 2
return state//直接返回的值地址渲染前和渲染后地址没有改变
})
}}>{state.num}</div>
)
}
export default ThisSetState
此时setState返回的值地址没有改变,所以点击时不会重新渲染。它类似 class 组件的 this.setState()
,但是它不会把新的 state 和旧的 state 进行合并(然而,不像 class 中的 this.setState
,更新 state 变量总是替换它而不是合并它。)
如果我们想要触发视图更新需要拷贝一下返回值:
import React, { Component, useState } from 'react'
const ThisSetState = () => {
const [state, setState] = useState({ num: 1 })
return (
<div onClick={() => {
setState(() => {
state.num = 2
return {...state}//新地址的变量
})
}}>{state.num}</div>
)
}
export default ThisSetState
redux通过props视图更新:
redux中是通过dispatch来触发model层数据改变,然后props传入组件来使视图更新,props也是需要视图更新前后引用变量地址发生变化,才重新渲染视图。
export default {
namespace: 'testModel',//单一状态树上的唯一标识(每一个model必须有唯一命名空间)
state: {
name: 'rayhomie'
},
reducers: {
setName(state, payload) {
console.log(payload);
// const _state = JSON.parse(JSON.stringify(state));
//state改变前后内存地址改变才能触发更新
// _state.name = payload.data.name
return {
...state}
},
},
}
边栏推荐
猜你喜欢
随机推荐
1: bubble sort
技术分享 | 使用 cURL 发送请求
Redis 回击 Dragonfly:13 年后,Redis 的架构依然是同类最佳
使用.NET简单实现一个Redis的高性能克隆版(四、五)
批量修改Shapefile属性表的一种方法(使用gdal.jar)
Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
The GNU Privacy Guard
[Halcon&定位] 解决Roi区域外的模板匹配成功
EndNote使用指南
关于SQL的SELECT查询语句的一般格式的描述2021-05-19
KeyBERT和labse提取字符串中的关键词
阿里神作!吃透这份资料入厂率高达99%
hover内部指定子类的样式
3. Practice the Thread
字符串函数和内存函数
LeetCode75:颜色分类-C语言一次遍历求解
【八大排序③】快速排序(动图演绎Hoare法、挖坑法、前后指针法)
多线程案例——阻塞式队列
极域Killer 1.0代码
【八大排序②】选择排序(选择排序,堆排序)