У меня есть родительский класс и дочерний класс. Детский класс будет выполнять начальную операцию загрузки на основе свойства, переданного из родителя. Родительский класс будет обращаться к этим данным, используя статический метод из дочернего элемента. В сущности, я пытаюсь использовать дочерний класс в качестве службы. Приведенный ниже код иллюстрирует сценарий (обратите внимание, что это всего лишь псевдокод).ReactJs обновляет родительский элемент после ComponentDidMount из дочернего класса
var Parent = React.createClass({
componentDidMount: function() {
console.log("parent component was mounted");
},
render: function() {
return (
<div>
<Child param={this.props.param} />
<p>Child.fetch('key')</p>
</div>
);
}
});
var Child = React.createClass({
getInitialState: function() {
return {
data: {}
};
},
componentDidMount: function() {
console.log("child component was mounted");
$.ajax({
url: "server/api.php",
data: {
param: param
}
}).done(function(response) {
this.setState({data: response});
}.bind(this));
},
statics: {
get: function(key) {
console.log('get requested for key: ' + key);
var value = null; // default value
if(this.data == null) { return value; }
//get the value from the data based on the key
return value;
}
},
render: function() {
return (
<h2>{this.props.param}</h2>
);
}
});
Проблема заключается в том, что функция рендеринга родителя не обновляется после того, как данные были загружены из дочернего класса. Порядок console.log результатов:
- Родителя рендер: получить испрашивается ключ: ключ
- родительского компонент был установлен
- ребенок компонент был установлен
- => должен инициировать обновление повторно -render parent
Я не уверен, что его можно вызвать функцию рендеринга родителя только один раз после того, как дочерний компонент был загружен. Я предполагаю, что это не так, поэтому достаточно запустить обновление для метода рендеринга родителя. Любые предложения, улучшения приветствуются, поскольку это для меня совершенно новое.
Я не думаю, что я понимаю, что вы пытаетесь достичь. Если дочерний компонент не является рендерингом на основе ответа, почему вы делаете это в дочернем компоненте, а не в родительском? –