Tôi đang đối mặt với một lỗi thú vị trong React.Thành phần ReactJS không hiển thị vùng văn bản có biến trạng thái
tôi có thành phần này:
'use strict';
import SummaryStore from '../stores/SummaryStore';
import React from 'react';
export default class ChangeSummaryForm extends React.Component {
constructor() {
// store initialisation
SummaryStore.register();
var vRating = SummaryStore.getBookForSummaryPrint().summaryRating;
var vStarClassName = this.getRatingClasses(vRating);
this.state = {
sStarClassName: vStarClassName,
sCurrentBookToShow: SummaryStore.getBookForSummaryPrint()
};
this.thereIsASummaryToShow = this.thereIsASummaryToShow.bind(this);
}
getRatingClasses(pRating) {
var vI, vStarClassName = [];
for(vI = 0; vI < 4; vI++) {
if(pRating > 0) {
vStarClassName.push("glyphicon glyphicon-star");
pRating--;
} else {
vStarClassName.push("glyphicon glyphicon-star-empty");
}
}
return vStarClassName;
}
componentDidMount() {
SummaryStore.addChangeListener(this.thereIsASummaryToShow);
}
componentWillUnmount() {
SummaryStore.removeChangeListener(this.thereIsASummaryToShow);
}
thereIsASummaryToShow() {
this.setState({sCurrentBookToShow: SummaryStore.getBookForSummaryPrint(),
sStarClassName: this.getRatingClasses(SummaryStore.getBookForSummaryPrint().rating)
});
$("#summaryModal").modal('show');
}
render() {
return (<div className="modal fade" id="summaryModal">
<form>
<div className="modal-dialog">
<div className="modal-content">
<div className="modal-header">
<button type="button" className="close" data-dismiss="modal" ariaLabel="Close"><span ariaHidden="true">× </span> </button>
<div style={{color: 'black'}}>
{this.state.sStarClassName.map(function(pCurrentClassName) { return (<span className={pCurrentClassName}></span>
);
})}
<h4 className="modal-title">Summary of {this.state.sCurrentBookToShow.title}</h4>
</div>
</div>
<div className="modal-body">
<div className="form-group">
<textarea className="form-control" rows="22" ref="summaryContent" >{this.state.sCurrentBookToShow.summary}</textarea>
</div>
</div>
<div className="modal-footer">
<button type="button" className="btn btn-default" data-dismiss="modal" >Close</button>
<input type="submit" className="btn btn-primary" value="Save"/>
</div>
</div>
</div>
</form>
</div>
);
}
}
Như bạn có thể nhận thấy, đó là một controller-view nghe tại một cửa hàng được đăng ký AppDispatcher tôi.
Các bước trên được thực hiện đúng. tức là, khi hành động cụ thể là triggerd, thành phần của tôi được hiển thị chính xác với các biến số {this.state.sCurrentBookToShow.title}
và this.state.sCurrentBookToShow.title
được cập nhật.
Vấn đề xuất phát từ phần này:
<textarea className="form-control" rows="22" ref="summaryContent" >
{this.state.sCurrentBookToShow.summary}
</textarea>
Chuỗi không được in trong khung văn bản.
Tôi cố gắng này để gỡ lỗi:
render() {
var summary = "this is a summary";
return (// .. shortened for brevity
<textarea className="form-control" rows="22" ref="summaryContent">
{summary}
</textarea> ..);
}
chuỗi summary
in một cách chính xác bên trong textearea thể thay đổi.
Lưu ý rằng trình duyệt của tôi nói:
Cảnh báo: Sử dụng
defaultValue
hoặcvalue
đạo cụ thay vì thiết trẻ em trên<textarea>
.
Nhưng tôi sẽ khắc phục điều này sau vì tôi cho rằng nó không ảnh hưởng đến vấn đề hiện tại.
EDIT: tôi đã nhận xét của bạn (cho đến nay) trong việc xem xét, vì vậy tôi cập nhật mã của tôi như vậy:
<h4 className="modal-title">Summary of {this.state.sCurrentBookToShow.summary}</h4>
</div>
</div>
<div className="modal-body">
<div className="form-group">
{this.state.sCurrentBookToShow.summary}
<textarea className="form-control" rows="22" ref="summaryContent" defaultValue={this.state.sCurrentBookToShow.summary}></textarea>
</div>
- tôi thay
this.state.sCurrentBookToShow.title
bởi.summary
để làm chắc chắn các bậc thang không phải là trống. - tôi đặt các bản tóm tắt thành một chỗ dựa
defaultValue
Đây là kết quả:
Second chỉnh sửa:
Tôi đã tải lên một mẫu app làm nổi bật vấn đề này. Tôi hy vọng điều này sẽ giúp tìm ra giải pháp thích hợp
Vui lòng cung cấp jsfiddle mà chúng tôi có thể xem. – gcedo
@Làm Ứng dụng của tôi, tôi gặp khó khăn khi tải lên vì các phụ thuộc của kiến trúc Flux ... Tôi không biết cách nhanh chóng đặt jsfiddle trong tình huống này. – Mayas
Bạn có thể nhấp chuột phải, kiểm tra phần tử bên trong vùng văn bản và báo cáo nội dung trong đó không? – gcedo