Redux là một thư viện nhỏ đại diện cho trạng thái là (không thay đổi) đối tượng. Và trạng thái mới bằng cách chuyển trạng thái hiện tại thông qua các hàm thuần túy để tạo trạng thái ứng dụng/đối tượng hoàn toàn mới.
Nếu mắt bạn bị lóa mắt thì đừng lo lắng. Tóm lại, Redux không đại diện cho các thay đổi trong trạng thái ứng dụng của bạn bằng cách sửa đổi các đối tượng (như bạn làm với các mô hình hướng đối tượng). Thay vào đó, các thay đổi trạng thái được thể hiện dưới dạng sự khác biệt giữa đối tượng đầu vào và đối tượng đầu ra (var output = reducer(input)
). Nếu bạn tắt tiếng input
hoặc output
bạn làm mất hiệu lực trạng thái.
Để tóm tắt một cách khác, bất biến là yêu cầu của Redux vì Redux đại diện cho trạng thái ứng dụng của bạn là "ảnh chụp nhanh đối tượng đông lạnh". Với ảnh chụp nhanh rời rạc này, bạn có thể lưu trạng thái của mình hoặc trạng thái đảo ngược và thường có nhiều "kế toán" hơn cho tất cả các thay đổi trạng thái.
Trạng thái ứng dụng của bạn là chỉ được thay đổi bằng danh mục hàm thuần túy được gọi là bộ giảm tốc. Hộp số có 2 thuộc tính quan trọng:
- Họ không bao giờ đột biến, trở về đối tượng mới được xây dựng: Điều này cho phép lập luận về đầu vào + đầu ra mà không tác dụng phụ
- chữ ký của họ là luôn
function name(state, action) {}
, vì vậy nó làm cho dễ dàng thao tác chúng:
Giả sử nhà nước trông như thế này:
var theState = {
_2ndLevel: {
count: 0
}
}
Chúng tôi muốn tăng số lần, vì vậy chúng tôi làm cho những gia giảm
const INCR_2ND_LEVEL_COUNT = 'incr2NdLevelCount';
function _2ndlevel (state, action) {
switch (action.type) {
case INCR_2ND_LEVEL_COUNT:
var newState = Objectd.assign({}, state);
newState.count++
return newState;
}
}
function topLevel (state, action) {
switch (action.type) {
case INCR_2ND_LEVEL_COUNT:
return Objectd.assign({}, {_2ndLevel: _2ndlevel(state._2ndlevel)});
}
}
Lưu ý việc sử dụng Objectd.assign({}, ...)
để tạo ra một đối tượng hoàn toàn mới trong mỗi giảm:
Giả sử chúng tôi đã có dây lên Redux với các bộ giảm tốc này, nếu chúng tôi sử dụng hệ thống sự kiện của Redux để kích hoạt thay đổi trạng thái ...
dispatch({type: INCR_2ND_LEVEL_COUNT})
... Redux sẽ gọi:
theNewState = topLevel(theState, action);
LƯU Ý: action
là từ dispatch()
Bây giờ theNewState
là một đối tượng hoàn toàn mới.
Lưu ý: Bạn có thể thực thi bất biến với a library (hoặc new language features), hoặc chỉ cần cẩn thận để không đột biến bất cứ điều gì: D
Đối với một cái nhìn sâu hơn, tôi khuyên bạn nên bạn kiểm this video bởi Dan Abramov (tác giả). Nó sẽ trả lời bất kỳ câu hỏi kéo dài bạn có.
Nó làm cho mọi thứ dễ dàng hơn để lý do về, và giúp ngăn bạn vô tình thay đổi trạng thái bên ngoài cách thực hiện Redux. –
tx cho câu trả lời ... nhưng loại mơ hồ của nó .. Tôi biết đó là những gì họ luôn luôn nói .. thay đổi một tên từ A đến B không làm cho nó phức tạp hơn hoặc khó khăn hơn về ... – born2net
Hãy để tôi đặt nó theo cách này: nếu tôi biết rằng một cấu trúc dữ liệu là không thể thay đổi, tôi biết có những phần của mã hoàn toàn không thể thay đổi nó. Điều đó làm cho việc kiểm tra mã và tìm lỗi đơn giản hơn rất nhiều. –