Реактивный класс не рендеринг

Я пытаюсь следовать учебному пособию "Реакция и крестики-нолики", но когда я пытаюсь отобразить страницы, у меня есть этот код


    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 по какой-то причине не рендерится. Я использую ruby ​​на рельсах со встроенным webpacker для загрузки всех javascripts

5 ответов

Решение

Во-первых, почему у вас есть ReactDom.render(...) завернутый в это событие слушатель? Во-вторых, почему вы передаете ReactDom.render(...) console.log()? Он должен принимать только два аргумента: компонент и элемент, к которому он должен быть добавлен. Попробуйте удалить console.log() и если это все еще не работает, попробуйте удалить прослушиватель событий, который оборачивает ваш ReactDoom.render(...),

ReactDOM.render() принимает 2 аргумента: компонент и монтирующий элемент DOM. Вы передаете console.log за первый аргумент.

Вызвать вызов console.log оценивает undefined вы в основном делаете:

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

Я удивлен, что ReactDOM.render не выдает ошибку, хотя вы передаете ей совершенно бесполезные аргументы.

Вам необходимо удалить консольный журнал из вызова рендеринга ReactDOM.

Если мне нужно визуализировать в компоненте, я могу сделать это как таковой.

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

Ваш рендер должен быть следующим:

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

Предполагая, что ваш дочерний компонент передается как "экспортировать игру по умолчанию", а ваш идентификатор вашего базового файла HTML равен "root".

Визуализация требует только двух аргументов. Первый - это передаваемый компонент, а второй - цель, в которую он должен поместить себя. Вам нужно только сделать этот шаг в вашем файле index.js. Нигде более.

Другие вопросы по тегам