網(wǎng)站首頁 編程語言 正文
一、react中使用antd組件庫
運(yùn)行命令create-react-app antd-react創(chuàng)建新項(xiàng)目:
運(yùn)行命令npm i antd安裝:
使用:
import React from 'react'
import ReactDOM from 'react-dom'
import 'antd/dist/antd.css';
import { Button } from 'antd';
ReactDOM.render(
<div>
<Button type="primary">Primary Button</Button>
</div>,
document.getElementById("root"));
二、Immutable
每次修改一個(gè)immutable對象時(shí)都會(huì)創(chuàng)建一個(gè)新的不可變的對象,在新對象上操作并不會(huì)影響到原對象的數(shù)據(jù)。
2.1 深拷貝和淺拷貝的關(guān)系
1、Object.assign或者... 只是一級屬性賦值,比淺拷貝多拷貝了一層而已。
2、const obj1 = JSON.parse(JSON.stringify(obj)) 數(shù)組,對象都好用(缺點(diǎn):不能有字段為undefined)。
2.2 immutable優(yōu)化性能方式
immutable實(shí)現(xiàn)的原料是Persistent Data Structure(持久化數(shù)據(jù)結(jié)構(gòu)),也就是使用舊數(shù)據(jù)創(chuàng)建新數(shù)據(jù)時(shí),要保準(zhǔn)舊數(shù)據(jù)同時(shí)可用且不變。同時(shí)為了避免deepCopy把所有節(jié)點(diǎn)都復(fù)制一遍帶來的性能損耗,immutable使用了structural sharing(結(jié)構(gòu)共享),即如果對象樹中一個(gè)節(jié)點(diǎn)發(fā)生變化,只修改這個(gè)節(jié)點(diǎn)和受它影響的父節(jié)點(diǎn),其它節(jié)點(diǎn)則進(jìn)行共享。
安裝輸入命令npm i immutable:
2.3 immutable的Map使用
map使用(map只能套一層,如果屬性還是對象或者數(shù)組的話就再套一層):
import React from 'react'
import { createRoot } from 'react-dom/client';
import 'antd/dist/antd.css'
import { Button } from 'antd'
import {Map} from 'immutable'
var obj = {
name: 'immutable'
}
var oldObj = Map(obj)
console.log(oldObj)
// 更改值
var newObj = oldObj.set('name', 'react')
// 1.獲取值:get獲取
console.log(oldObj.get('name'), newObj.get('name'))
// 2.獲取值:普通對象
console.log(oldObj.toJS(), newObj.toJS())
const container = document.getElementById('root')
const root = createRoot(container)
root.render(
<div>
<Button type="primary">Primary Button</Button>
</div>
)
效果:
state中使用:
import React, { Component } from 'react'
import { Map } from 'immutable'
export default class imMap extends Component {
state = {
info: Map({
name: 'immutable',
key: 100
})
}
render() {
return (
<div>
<button onClick={() => {
this.setState({
info: this.state.info.set('name', 'react').set('key', 101)
})
}}>onclick</button>
{this.state.info.get('name')} --
{this.state.info.get('key')}
</div>
)
}
}
可以看到多個(gè)值時(shí),immutable可以鏈?zhǔn)讲僮鳌?/p>
2.4 immutable的List使用
import React, { Component } from 'react'
import {List} from 'immutable'
var arr = List([1,2,3])
var arr1 = arr.push(4)
var arr2 = arr1.concat([5])
console.log(arr.toJS(), arr1.toJS(), arr2.toJS())
export default class ImList extends Component {
render() {
return (
<div>ImList</div>
)
}
}
效果:
2.5 實(shí)際場景formJS
在實(shí)際開發(fā)中我們的state中數(shù)據(jù)結(jié)構(gòu)一般來自后端返回的,那么我們將使用formJS:
import React, { Component } from 'react'
import { fromJS } from 'immutable'
export default class ImFromJs extends Component {
state = {
info: fromJS({
list: ['1', '2', '3'],
obj: {
name: 'immutable',
key: 100,
}
})
}
render() {
return (
<div>ImFromJs
<div><button onClick={() => {
this.setState({
info: this.state.info.setIn(['obj', 'name'], 'react')
})
}}>改變標(biāo)題</button></div>
<div><button onClick={() => {
this.setState({
info: this.state.info.updateIn(['list'], (oldList) => {
return oldList.push(oldList._tail.array.length + 1)
})
})
}}>改變數(shù)組</button></div>
<div>{this.state.info.getIn(['obj', 'name'])}</div>
<div>
<ul>
{
this.state.info.get('list').map((item, index) => {
return <li key={index}>{item}
<button onClick={() => {
this.setState({
info: this.state.info.updateIn(['list'], (oldList) => {
return oldList.splice(index, 1)
})
})
}}>del</button>
</li>
})
}
</ul>
</div>
</div>
)
}
}
效果:
三、redux中使用immutable
在學(xué)習(xí)React的路上,如果你覺得本文對你有所幫助的話,那就請關(guān)注點(diǎn)贊評論三連吧,謝謝,你的肯定是我寫博的另一個(gè)支持。
原文鏈接:https://juejin.cn/post/7129120942155890718
相關(guān)推薦
- 2022-03-03 【css】page-break-after 頁面打印分頁屬性
- 2022-12-13 pandas中merge()函數(shù)的用法解讀_python
- 2023-07-15 監(jiān)聽鼠標(biāo)mouse事件冒泡處理
- 2023-10-16 向前端傳遞Long類型數(shù)據(jù)時(shí)發(fā)生精度缺失解決辦法
- 2022-11-22 react?hooks實(shí)現(xiàn)原理解析_React
- 2022-04-09 關(guān)于Python中的閉包詳解_python
- 2022-11-12 C語言內(nèi)存操作函數(shù)使用示例梳理講解_C 語言
- 2022-08-14 Nginx安裝配置詳解_nginx
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支