버튼을 클릭하면 구성 요소 내에 요소를 동적으로 작성하는 도우미 함수를 작성했습니다. 그러나 그것은 부모 div에 추가하려고하는 html의 절반을 표시하지 않습니다.React 구성 요소 내에서 요소를 동적으로 작성하십시오.
레이블을 HTML로 올바르게 추가하지만 나머지는 일반 텍스트입니다. 왜 누군가는 볼 수 있습니까?
동적으로 컨텐츠를 생성하는 데 사용되는 기능 :
function addElement(parentId, elementTag, elementId, html) {
let parentElement = document.getElementById(parentId);
let elementToAdd = document.createElement(elementTag);
elementToAdd.setAttribute('id', elementId);
elementToAdd.innerHTML = html;
parentElement.appendChild(elementToAdd);
}
내 구성 요소에서 내 기능 :
static addMatch() {
let html = "<div className=\"form-group\"><label className=\"control-label\">Add Match</label>" +
"<DatePickerselected={this.state.startDate}onChange={this.handleChange.bind(this)}/></div>";
addElement('fixture-parent', 'newMatch', uuid(), html);
}
내 전체 구성 요소는 다음과 같습니다 반응 :
import React, {Component} from "react";
import DatePicker from "react-datepicker";
import {addElement} from "../../helpers/DynamicElementsHelper";
import moment from "moment";
const uuid = require('uuid/v1');
require('react-datepicker/dist/react-datepicker.css');
class Fixtures extends Component {
constructor() {
super();
Fixtures.addMatch = Fixtures.addMatch.bind(this);
this.state = {
startDate: moment()
};
}
handleChange(date) {
this.setState({
startDate: date
});
}
static addMatch() {
let html = "<div className=\"form-group\"><label className=\"control-label\">Add Match</label>" +
"<DatePicker selected={this.state.startDate} onChange={this.handleChange.bind(this)} /></div>";
addElement('fixture-parent', 'newMatch', uuid(), html);
}
render() {
return (
<div className="tray tray-center">
<div className="row">
<div className="col-md-8">
<div className="panel mb25 mt5">
<div className="panel-heading">
<span className="panel-title">Fixtures</span>
<p>A list of fixtures currently on the system, pulled in via ajax from Ratpack</p>
</div>
<div className="panel-body p20 pb10">
<div id="fixture-parent" className="form-horizontal">
<div className="form-group">
<label className="control-label">Add Match</label>
<DatePicker
selected={this.state.startDate}
onChange={this.handleChange.bind(this)}/>
</div>
</div>
</div>
<button onClick={Fixtures.addMatch }>Add Match</button>
</div>
</div>
</div>
</div>
);
}
}
export default Fixtures;
React에서는 DOM과 직접 상호 작용하지 않는 것이 좋습니다. 대신, 가지고있는 데이터에 따라 JSX를 수정해야한다. 질문의 React 부분을보기 위해 더 많은 코드를 추가 하시겠습니까? –
전체 반응 성분을 추가했습니다. –
DatePicker는 반응 구성 요소이며 html이 아니므로이 html 문자열을 렌더링하면 구성 요소가 렌더링되지 않으므로 문자열 만 가정합니다. 그럼에도 불구하고, DOM을 업데이트하는이 방법은 반대로 반응하고 큰 문제를 일으킬 수 있습니다. 추가 요소를 만드는 데 대응해야합니다. – Ted