Tôi có thành phần sau ( radioOther.jsx
):
'use strict';
//module.exports = <-- omitted in update
class RadioOther extends React.Component {
// omitted in update
// getInitialState() {
// propTypes: {
// name: React.PropTypes.string.isRequired
// }
// return {
// otherChecked: false
// }
// }
componentDidUpdate(prevProps, prevState) {
var otherRadBtn = this.refs.otherRadBtn.getDOMNode();
if (prevState.otherChecked !== otherRadBtn.checked) {
console.log('Other radio btn clicked.')
this.setState({
otherChecked: otherRadBtn.checked,
});
}
}
onRadChange(e) {
var input = e.target;
this.setState({
otherChecked: input.checked
});
}
render() {
return (
<div>
<p className="form-group radio">
<label>
<input type="radio"
ref="otherRadBtn"
onChange={this.onRadChange}
name={this.props.name}
value="other"/>
Other
</label>
{this.state.otherChecked ?
(<label className="form-inline">
Please Specify:
<input
placeholder="Please Specify"
type="text"
name="referrer_other"
/>
</label>)
:
('')
}
</p>
</div>
)
}
};
Trước khi sử dụng ECMAScript6 tất cả đều ổn, bây giờ tôi nhận được 1 lỗi, 1 cảnh báo và tôi có một câu hỏi tiếp theo:
Lỗi: Uncaught TypeError: Không thể đọc thuộc tính 'otherChecked' của null
Cảnh báo: getInitialState đã được xác định trên RadioOther, một lớp JavaScript đơn giản. Điều này chỉ được hỗ trợ cho các lớp được tạo bằng React.createClass. Ý của bạn là định nghĩa một tài sản nhà nước thay thế?
Bất cứ ai cũng có thể thấy lỗi nằm ở đâu, tôi biết đó là do câu lệnh có điều kiện trong DOM nhưng rõ ràng tôi không khai báo chính xác giá trị ban đầu của nó?
Tôi có nên làm cho getInitialState tĩnh
Đâu là nơi thích hợp để khai báo proptypes của tôi nếu getInitialState không đúng?
CẬP NHẬT:
RadioOther.propTypes = {
name: React.PropTypes.string,
other: React.PropTypes.bool,
options: React.PropTypes.array }
module.exports = RadioOther;
@ssorallen, mã này:
constructor(props) {
this.state = {
otherChecked: false,
};
}
sản xuất "Uncaught ReferenceError: this is not defined"
, và trong khi dưới đây sửa chữa rằng
constructor(props) {
super(props);
this.state = {
otherChecked: false,
};
}
nhưng bây giờ, nhấp vào nút khác bây giờ tạo ra lỗi:
Uncaught TypeError: Cannot read property 'props' of undefined
onChange={this.onRadChange}
,this
không tham chiếu đến thể hiện khionRadChange
được gọi. Bạn cần liên kết các cuộc gọi lại trongrender
hoặc thực hiện nó trong hàm tạo :onChange={this.onRadChange.bind(this)}
.