Đây là một bản demo với một mã số nhận xét ra để cung cấp cho bạn thêm thông tin: http://codepen.io/PiotrBerebecki/pen/rrGWjm
1. Nhà nước là gì trong dòng 3? trông giống như một biến toàn cầu, nó làm cho cảm giác nếu nó có var hoặc const trước nó. Đó có phải là vòng đời chức năng/var?
state
trong dòng 3 chỉ là thuộc tính của thành phần Bộ đếm. Một cách khác để initialising một tiểu bang trong React sử dụng cú pháp ES6 là như sau:
constructor() {
super();
this.state = {
value: 0
}
}
Phản ứng tài liệu: https://facebook.github.io/react/docs/reusable-components.html#es6-classes
Các [Phản ứng ES6 lớp] API tương tự như React.createClass với ngoại lệ của getInitialState. Thay vì cung cấp phương thức getInitialState riêng, bạn thiết lập thuộc tính trạng thái của riêng bạn trong hàm tạo.
2. Tôi có phải nhập Thành phần từ phản ứng không? Tôi nhớ tôi không cần phải làm điều đó trong v15.
Bạn có thể cách khác chỉ nhập khẩu Phản ứng và xác định một lớp theo cách sau:
import React from 'react';
class Counter extends React.Component {
...
dưới đây cũng sẽ cho phép bạn sử dụng Component API:
import React, { Component } from 'react';
class Counter extends Component {
...
3. Trường hợp nào prevState đến từ đâu?
Các prevState xuất phát từ api setstate: https://facebook.github.io/react/docs/component-api.html#setstate
Cũng có thể để vượt qua một chức năng với chữ ký chức năng (nhà nước, đạo cụ). Điều này có thể hữu ích trong một số trường hợp khi bạn muốn để enqueue bản cập nhật nguyên tử tham khảo giá trị trước đó của đạo cụ nhà nước trước khi đặt bất kỳ giá trị nào. Ví dụ, giả sử chúng ta muốn để tăng giá trị trong tình trạng:
this.setState(function(previousState, currentProps) {
return {
value: previousState.value + 1
};
});
Bạn thường sẽ thấy các nhà phát triển cập nhật trạng thái theo cách sau. Điều này kém tin cậy hơn so với phương thức trên vì trạng thái có thể được cập nhật không đồng bộ và chúng ta không nên dựa vào các giá trị của nó để tính toán trạng thái tiếp theo.
this.setState({
value: this.state.value + 1 // prone to bugs
});
Full mã từ codepen tôi:
class Counter extends React.Component {
// state = { value: 0 };
// you can also initialise state in React
// in the constructor:
constructor() {
super();
this.state = {
value: 0
}
}
increment =() => {
this.setState(prevState => ({
value: prevState.value + 1
}));
}
decrement =() => {
this.setState(prevState => ({
value: prevState.value - 1
}));
}
render() {
return (
<div>
{this.state.value}
<button onClick={this.increment}>+</button>
<button onClick={this.decrement}>-</button>
</div>
)
}
}
ReactDOM.render(
<Counter />,
document.getElementById('app')
);
ah này là rất rõ ràng cảm ơn! có nghĩa là số 1, tác giả đã không làm điều đó đúng cách? đó là ok trong tùy chọn của tôi nếu anh ta làm 'const state = {'value': 0}' –
Tôi vừa thêm đúng cách để khởi tạo trạng thái cho câu trả lời của tôi, theo câu hỏi 1. –
Tôi thấy rằng, bạn đang nói tác giả đã làm nó một cách sai lầm? ý bạn là gì? Tôi biết việc thiết lập một hàm tạo là cách phổ biến để làm công cụ. –