Окно не определяется с NextJS при использовании эластичного пользовательского интерфейса
Просто пытаюсь добавить кнопку из библиотеки Elastic UI, но просто получение окна не определяется при добавлении кнопки. Вызов API и все остальное работают нормально, пока я не добавлю компонент кнопки или как только добавлю импорт в строке 3 ниже.
Есть ли способ использовать библиотеку Elastic UI при вызове api на стороне сервера?
Вот основной код:
import React from "react";
import "isomorphic-unfetch";
import { EuiButton } from "@elastic/eui";
export default class HomePage extends React.Component {
static async getInitialProps() {
let res = await fetch("https://api.randomuser.me/");
let randUser = await res.json();
console.log(randUser);
return { users: randUser };
}
render() {
return (
<div>
<h2>User info:</h2>
<ul>
{this.props.users.results.map((user, i) => {
return <li key={"user-" + i}>{user.gender}</li>;
})}
</ul>
<EuiButton href="http://www.elastic.co">Link to elastic.co</EuiButton>
</div>
);
}
}
1 ответ
Не знаю, может ли это быть правильным решением, но я бы рассмотрел следующий динамический импорт.
Мне удалось заставить предыдущий код работать со своей стороны, но я не знаю, будет ли кнопка рендеринга на 100% той, которую вы ожидаете.
import React from "react";
import dynamic from 'next/dynamic'
import "isomorphic-unfetch";
export default class HomePage extends React.Component {
static async getInitialProps() {
let res = await fetch("https://api.randomuser.me/");
let randUser = await res.json();
console.log(randUser);
return { users: randUser };
}
render() {
// dynamic import of the button
const EuiButton = dynamic(() => import('@elastic/eui/').then(module => module.EuiButton))
return (
<div>
<h2>User info:</h2>
<ul>
{this.props.users.results.map((user, i) => {
return <li key={"user-" + i}>{user.gender}</li>;
})}
</ul>
{/*render it only if we're from client side*/}
{process.browser ? <EuiButton href="http://www.elastic.co">Link to elastic.co</EuiButton> : null }
</div>
);
}
}
Надеюсь, это поможет вам понять, как решить вашу проблему.