Я изо всех сил стараюсь, чтобы мой компонент работал как на стороне клиента, так и на стороне сервера.Отправка серверной части Реагировать компоненты, загружающие состояние через Ajax
Это код для моего компонента:
export default class extends React.Component {
constructor(props, context) {
super(props, context);
this.state = {
title: props.params.title,
message: props.params.message
};
}
componentDidMount() {
$.ajax({
url: "/get-message",
success: function (result) {
this.setState({
title: result.title,
message: result.message
});
}.bind(this),
cache: false
});
}
render() {
return (
<div>
<h2>{this.state.title}</h2>
<h3>{this.state.message}</h3>
</div>
);
}
}
Он работает нормально. Когда он отображается на стороне клиента, он показывает как h2
, так и h3
пустым, а затем они заполняются при возврате вызова ajax.
Когда он получает визуализацию, хотя сервер, я уже получаю эти реквизиты, и html, отправленный клиенту, уже завершен и не нуждается в чем-то дополнительном.
Проблема заключается в том, что, когда он визуализируется на сервере, я получаю сообщение об ошибке на клиенте:
Warning: React attempted to reuse markup in a container but the checksum was invalid. [...]
Затем вызывается метод АЯКС снова и снова делает все.
Итак, как мне обращаться с таким случаем? Есть ли способ сказать React, что этот компонент был отображен на сервере, принять его и не вызвать метод componentDidMount
?
Хотите ли вы на стороне сервера визуализации сделать вызов AJAX? поэтому у КЛИЕНТА будет ЗАКЛЮЧИТЕЛЬНАЯ разметка? –
вызов ajax вызовет метод, доступный на стороне сервера, так что никакого аякс-вызова на сервере не будет. Принятый ответ сделал то, что мне было нужно. благодаря – user3900456