使用弹性UI时未使用NextJS定义窗口

时间:2020-04-28 19:54:15

标签: reactjs next.js elasticui

只是尝试从Elastic UI库中添加按钮,但是在添加按钮时只是未定义窗口。在我添加按钮组件或在下面的第3行中添加导入之前,API调用和其他所有东西都可以正常工作。

在调用服务器端api时是否可以使用Elastic UI库?

这是主要代码:

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 个答案:

答案 0 :(得分: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>
    );
  }
}

希望这可以为您提供解决问题的方法。