'React'已定义但从未使用过

时间:2017-12-26 15:13:39

标签: javascript reactjs

我正在按照the official reactjs说明创建示例应用。我的节点版本是6.9.0。

我根据官方网站使用以下说明创建了示例反应应用程序,它应该显示一个空的tic tac toe表:

npm install -g create-react-app

create-react-app my-app

cd my-app

已更改为 my-app 目录

按照指示删除了源目录中的默认文件。现在 我的 index.js 看起来像这样

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css'; 

然后我跑了yarn start

但我看到的只是空白屏幕没有tic tac toe table。并在控制台中发出警告

Compiled with warnings.

./src/index.js
  Line 1:  'React' is defined but never used     no-unused-vars
  Line 2:  'ReactDOM' is defined but never used  no-unused-vars

Search for the keywords to learn more about each warning.
To ignore, add // eslint-disable-next-line to the line before.

4 个答案:

答案 0 :(得分:2)

你应该创建一些组件/元素/,或者设置样式,然后调用ReactDOM将你的组件渲染到底层的html,然后你就可以了。

  • React用于处理JSX和React组件的创建
  • 在您的简单案例中,
  • ReactDOM将用于将创建的元素渲染为dom。

见这里:https://reactjs.org/blog/2015/10/01/react-render-and-top-level-api.html

所以像

这样的东西
ReactDOM.render(
  <h1>Hello, world!</h1>,
  document.getElementById('root')
);

到您的代码中,如果您的index.html id="root"标记内有<body>元素,您将获得一些内容

答案 1 :(得分:1)

你错过了第4步和第4步的最后部分。 5:

  
      
  1. 使用this CSS code在src /文件夹中添加名为index.css的文件。
  2.   
  3. 使用this JS code在src /文件夹中添加名为index.js的文件。
  4.   

index.css

body {
  font: 14px "Century Gothic", Futura, sans-serif;
  margin: 20px;
}

ol, ul {
  padding-left: 30px;
}

.board-row:after {
  clear: both;
  content: "";
  display: table;
}

.status {
  margin-bottom: 10px;
}

.square {
  background: #fff;
  border: 1px solid #999;
  float: left;
  font-size: 24px;
  font-weight: bold;
  line-height: 34px;
  height: 34px;
  margin-right: -1px;
  margin-top: -1px;
  padding: 0;
  text-align: center;
  width: 34px;
}

.square:focus {
  outline: none;
}

.kbd-navigation .square:focus {
  background: #ddd;
}

.game {
  display: flex;
  flex-direction: row;
}

.game-info {
  margin-left: 20px;
}

index.js

class Square extends React.Component {
  render() {
    return (
      <button className="square">
        {/* TODO */}
      </button>
    );
  }
}

class Board extends React.Component {
  renderSquare(i) {
    return <Square />;
  }

  render() {
    const status = 'Next player: X';

    return (
      <div>
        <div className="status">{status}</div>
        <div className="board-row">
          {this.renderSquare(0)}
          {this.renderSquare(1)}
          {this.renderSquare(2)}
        </div>
        <div className="board-row">
          {this.renderSquare(3)}
          {this.renderSquare(4)}
          {this.renderSquare(5)}
        </div>
        <div className="board-row">
          {this.renderSquare(6)}
          {this.renderSquare(7)}
          {this.renderSquare(8)}
        </div>
      </div>
    );
  }
}

class Game extends React.Component {
  render() {
    return (
      <div className="game">
        <div className="game-board">
          <Board />
        </div>
        <div className="game-info">
          <div>{/* status */}</div>
          <ol>{/* TODO */}</ol>
        </div>
      </div>
    );
  }
}

// ========================================

ReactDOM.render(
  <Game />,
  document.getElementById('root')
);

答案 2 :(得分:1)

这仅表示您的项目已配置了eslint来捕获未使用的变量。

如果您在该文件中使用JSX或其他任何React,则警告将消失,就像zmii在他的回答中建议的那样。

但是我写这个答案是因为有人向我展示了他们的代码,而他们也面临着同样的问题。

他们的代码:

import React from 'react';

const person = () => {
    return "<h2>I am a person!</h2>"
};

export default person;

以上代码中的问题是返回时,他使用了双引号。因此,它不是返回JSX,而是返回字符串,因此,他们收到了从未使用过React的错误。

结论:语法很重要,因此请记住,特别是如果您刚入门。

希望这对某人有帮助。

答案 3 :(得分:1)

ESlint需要配置为与React JSX一起使用。出色的article具有所有细节。