繁体   English   中英

React类不渲染

[英]React class not rendering

我正在尝试遵循reactjs tic tac toe教程,但是当我尝试呈现页面并且有此代码时


    import React from 'react'
    import ReactDOM from 'react-dom'
    import Game from '../components/Game'
    document.addEventListener('DOMContentLoaded', () => {
        ReactDOM.render(
            console.log("render is working"),
            <Game />,
            document.getElementById('root'),
        );
    })

游戏类看起来像

    import React from 'react'
    import ReactDOM from 'react-dom'
    import Board from './Board'

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

    export default Game

“渲染器正在向控制台打印输出,但是控制台日志中没有显示“万岁,游戏正在运行”,因此似乎出于某些原因未渲染Game类。 我正在使用内置webpacker的Rails在Rails上加载所有JavaScript

ReactDOM.render()有两个参数:component和mount DOM元素。 您正在为第一个参数传递console.log

导致调用console.log结果基本上是undefined

ReactDOM.render(
   undefined, // <- react component
   <Game />, // <- target 
   document.getElementById('root'), // < - useless
);

我很惊讶ReactDOM.render不会引发错误,尽管您正在向它传递完全无用的参数。

首先,为什么要在事件监听器中包装ReactDom.render(...) 二,为什么要通过ReactDom.render(...)传递console.log() 它应该仅包含两个参数:一个组件以及应该附加到其上的元素。 尝试删除console.log() ,如果仍然无效,请尝试删除包装了ReactDoom.render(...)的事件侦听器。

您需要从ReactDOM渲染调用中删除控制台日志。

如果需要在组件中渲染,则可以这样做。

<div>
  .....
  {console.log('Inline console in render method')}
</div>

您的渲染应如下所示:

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

假设您的子组件作为“导出默认游戏”传递,并且您的HTML基本文件的ID为“ root”。

渲染仅需要两个参数。 第一个是要传入的组件,第二个是应放置其自身的目标。 您只需要在“ index.js”文件中执行此步骤。 无处。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM