DANH MỤC TÀI LIỆU
Cách đảm bảo tính bất biến trong lập trình Java
Cách đ m b o tính b t bi n trong l p trình Java ấ ế
Khi làm vi c v i React, h n b n đã nghe đ n tính b t bi n c a d li u ệ ớ ế ế ủ ữ
(immutability). Đ c tính này, nói m t cách đ n gi n, là kh năng giá tr c a ơ ị ủ
d li u không b thay đ i sau khi đã đ c khai báo. Tính b t bi n giúp cho ữ ệ ượ ế
ch ng trình tr nên d d đoán, ít x y ra l i và trong m t s tr ng h p ươ ễ ự ườ
còn tăng hi u su t c a ng d ng. Do đó, React (và Redux) đ u khuy n ủ ứ ế
khích m i ng i vi t code đ h ng đ n đ c tính này. ườ ế ể ướ ế
Tuy v y, n u m i làm quen v i JavaScript và React, có th b n s b ng ế ể ạ ẽ ỡ
không bi t làm th nào cho “chu n nh t”. Bài vi t d i đây gi i thi u m tế ế ế ướ
s k thu t giúp b n h ng đ n immutability m t cách d dàng h n. ố ỹ ướ ế ơ
Chúng ta s nói v hàm thu n khi t, các thao tác x lý d li u trên m ng ế ữ ệ
và object. Cu i cùng, b n có th áp d ng ngay nh ng “tuy t chiêu” v a ể ụ
h c đ xây d ng m t demo nh b ng React. ỏ ằ
L u ý:ư kí hi u đ c s d ng trong bài vi t đ th hi n đây là k t ượ ế ể ể ệ ế
qu /hi u ng mong mu n. ệ ứ
Chúng ta b t đ u thôi!ắ ầ
Luôn dùng const khi khai báo d li uữ ệ
L i khuyên đ u tiên và cũng là căn b n nh t, luôn dùng ả ấ const khi khai báo.
Ch c b n cũng đã bi t, ế let và const đ c gi i thi u t phiên b n ES6, cho ượ ệ ừ
phép khai báo bi n có t m v c theo kh i và không th c hi n hoisting. ế ự ệ
Đi m khác bi t gi a let và const là b n có th thay đ i giá tr c a bi n khai ị ủ ế
báo v i let, trong khi không th v i const.
1
2
3
4
let foo = 1
foo = 2 // Không thành v n đấ ề
5
6
7
const bar = 1
bar = 2 // Error: Assignment to constant variable.
Do đó, trong h u h t các tr ng h p b n nên khai báo b ng ế ườ const đ tránh
x y ra l i khi giá tr c a khai báo b thay đ i b t ng . Cũng c n l u ý là ị ủ ư
khi khai báo objects v i const, m c dù b n không th gán giá tr m i cho ị ớ
object nh ng giá tr c a các thu c tính v n có th b thay đ i. ư ẫ ể ị ổ
1
2
3
4
5
6
7
8
const obj = { name: 'foo' }
obj = { name: 'bar' } // Error: Assignment to constant variable.
// Nh ng b n có th ...ư ạ
obj.name = 'bar'
console.log(obj) // { name: 'bar' }
Thao tác trên object
Nh v y đ thay đ i giá tr c a object mà v n đ m b o tính ch t b t bi n,ư ị ủ ế
chúng ta c n s d ng ử ụ Object.assign(target, ...sources). Hàm này có tác d ng
sao chép thu c tính c a các đ i t ng ố ượ sources vào target. Ví d nh : ụ ư
1
2
3
4
const a = { name: 'foo' }
const b = Object.assign({}, a, { name: 'bar', age: 1 }, { id: 9 })
console.log(b) // { name: 'bar', age: 1, id: 9 }
5
C n l u ý đ đ m b o tính b t bi n thì tham s ư ể ả ế target nên luôn là {}, vì khi
đó các giá tr c a sources s đ c sao chép vào đ i t ng m i. M t cách ẽ ượ ượ
dùng sai là:
1
2
3
4
5
6
7
const a = { name: 'foo' }
const b = Object.assign(a, { name: 'bar', age: 1 }, { id: 9 })
console.log(b) // { name: 'bar', age: 1, id: 9 }
console.log(a) // Giá tr c a a cũng b thay đ i thành { name: 'bar', age: 1, id: ị ủ
9 }
console.log(a === b) // true
Ngoài Object.assign(), b n cũng có th dùng cú pháp spread cho object. ạ ể
d :
1
2
3
4
5
6
const a = { name: 'foo' }
const b = { ...a, name: 'bar', age: 1, id: 9 }
console.log(b) // { name: 'bar', age: 1, id: 9 }
console.log(a === b) // false
L u ý là cú pháp này hi n v n đang đ c đ xu t vàư ượ ề ch a đ cư ượ h tr ỗ ợ
trên h u h t các trình duy t. N u mu n xài thì b n ph i dùng Babel hay ầ ế ế
Bublé đ chuy n đ i nhé. ể ổ
M t s thao tác th ng g p khác trên objectộ ố ườ
L y tên các thu c tính c a m t object ủ ộ
1
2
3
4
const obj = { name: 'bar', age: 1, id: 9 }
Object.keys(obj) // ['name', 'age', 'id']
L y giá tr c a các thu c tính c a m t object ị ủ
1
2
3
4
const obj = { name: 'bar', age: 1, id: 9 }
Object.values(obj) // ['bar', 1, 9]
L y c p [thu c tính, giá tr ] c a m t object ị ủ
1
2
3
4
const obj = { name: 'bar', age: 1, id: 9 }
Object.entries(obj) // [ ['name', 'bar'], ['age', 1], ['id', 9] ]
Xóa m t thu c tính ra kh i objectộ ộ
1
2
3
4
5
const a = { name: 'bar', age: 1, id: 9 }
// Xóa thu c tính age
const b = Object.entries(a).reduce((acc, [key, value]) => {
6
7
8
9
10
return key === 'age' ? acc : { ...acc, [key]: value }
}, {})
console.log(b) // { name: 'bar', id: 9 }
Thao tác trên m ng
Bên c nh object, m ng là c u trúc d li u r t th ng g p khi làm vi c ữ ệ ườ
trong JavaScript. Đ thay đ i d li u c a m t m ng mà v n đ m b o tính ữ ệ
b t bi n, b n có th s d ng cú pháp spread, đ c gi i thi u t ES5. V i ế ể ử ượ
m t s yêu c u khác, chúng ta có th áp d ng các hàm có s n c a l p ộ ố
Array, như map(), filter(), reduce(). M t đ c đi m c a các hàm này là chúngộ ặ
luôn tr v m ng/giá tr m i ch không thay đ i m ng ban đ u.ả ề
Áp d ng cú pháp spread
B n có th dùng spread đ nhân b n m t m ng. ộ ả
1
2
3
4
5
6
7
8
const a = [1, 2, 3, 4, 5]
const b = a
console.log(a === b) // true
const c = [...a]
console.log(a === c) // false
Thêm m t ph n t vào m ng ầ ử
1
2
3
4
5
6
7
8
9
const a = [1, 2, 3]
// Không nên: a.push(4)
const b = [...a, 4] // [1, 2, 3, 4]
// Không nên: a.unshift(0)
const c = [0, ...a] // [0, 1, 2, 3]
N i hai m ng v i nhau ả ớ
1
2
3
4
5
6
7
const a = [0, 1]
const b = [2, 3]
// Ho c a.concat(b)
const c = [...a, ...b]
Áp d ng hàm có s n đ : ẵ ể
Xóa m t ph n t ra kh i m ng các đ i t ng ố ượ
1
2
const a = [{ id: 1, name: 'Foo' }, { id: 2, name: 'Bar' }, { id: 3, name: 'Baz' }]
thông tin tài liệu
Khi làm việc với React, hẳn bạn đã nghe đến tính bất biến của dữ liệu (immutability). Đặc tính này, nói một cách đơn giản, là khả năng giá trị của dữ liệu không bị thay đổi sau khi đã được khai báo. Bài viết dưới đây sẽ hướng dẫn bạn cách đảm bảo tính bất biến này
Mở rộng để xem thêm
từ khóa liên quan
xem nhiều trong tuần
yêu cầu tài liệu
Giúp bạn tìm tài liệu chưa có

LÝ THUYẾT TOÁN


×