Почему на GitHub Pages не отображается мое веб-приложение React Redux Todo - PullRequest
0 голосов
/ 07 мая 2020

Я написал простое веб-приложение React Redux Todo, это его репозиторий GitHub ; он отлично работает на моем рабочем столе, но когда я публикую sh на страницах GitHub , я получаю пустую страницу. Интересно, что я добавил несколько операторов console.log по мере того, как элементы страницы отображаются, они отображаются в консоли, а их фрагменты страницы - нет.

Я использовал инструкции в Create React App Deployment , а именно те, которые находятся в разделе GitHub Pages .

Не атрибут homepage, сценарии predeploy и deploy, а также зависимость разработки gh-pages в Ниже приведен мой пакет. json файл:

{
  "name": "react_todo",
  "author": "Rodrigo Silveira",
  "version": "0.2.0",
  "homepage": "https://rodrigomattososilveira.github.io/react-redux-todo/",
  "private": true,
  "license": "MIT",
  "dependencies": {
    "@material-ui/core": "^4.9.11",
    "@material-ui/icons": "^4.9.1",
    "classnames": "^2.2.6",
    "material-table": "^1.57.2",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "react-redux": "^7.2.0",
    "react-scripts": "3.4.1",
    "redux": "^4.0.5",
    "shortid": "^2.2.15",
    "typeface-roboto": "^0.0.75"
  },
  "scripts": {
    "start": "react-scripts start",
    "predeploy": "yarn run build",
    "deploy": "gh-pages -d build",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  },
  "devDependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "@types/jest": "^24.0.0",
    "@types/node": "^12.0.0",
    "@types/react": "^16.9.0",
    "@types/react-dom": "^16.9.0",
    "@types/react-redux": "^7.1.7",
    "@types/shortid": "^0.0.29",
    "gh-pages": "^2.2.0",
    "typescript": "~3.7.2"
  }
}

A

Также обратите внимание, что у меня есть приложение React Todo , которое я смог опубликовать sh в свой собственный GitHub Pages , используя тот же рецепт, который я использую для его двоюродного брата [React Redux Todo (https://github.com/RodrigoMattosoSilveira/react-redux-todo).

1 Ответ

1 голос
/ 07 мая 2020

Как отлаживать приложение React?

В этом случае, поскольку ошибка произошла только один раз в производственной среде (развернутой на страницах Github), может показаться трудным найти источник.

Первый шаг - поиск ошибки в консоли:

Uncaught Error: Minified React error # 152; посетите https://reactjs.org/docs/error-decoder.html?invariant=152&args [] = Компонент для полного сообщения или используйте неминифицированную среду разработки для полных ошибок и дополнительных полезных предупреждений.

Полное сообщение об ошибке из ссылки составляет:

Компонент (...): ничего не было возвращено от рендеринга. Обычно это означает, что оператор возврата отсутствует. Или, чтобы ничего не отображать, верните null.

Следующий шаг - выяснить, как легко воспроизвести ошибку (и, надеюсь, локально).

С помощью Create-React-App , вы можете вручную создать производственную сборку с yarn build. Он скомпилирует окончательные файлы stati c в каталог ./build. Затем вы можете запустить любой простой HTTP-сервер на своем локальном компьютере. Лично я использую http-server, который я установил глобально, как инструмент быстрой отладки!

yarn build
http-server ./build

И вы должны увидеть то же самое, что и на страницах Github. , но по умолчанию с http://127.0.0.1:8080/.

Последний шаг - это поиск кода виновника. Возможно, есть лучшие способы сделать это, но вот способ, который всегда работает. Начните с самого минимального кода, поэтому закомментируйте весь свой собственный код.

const Root = () => (
  <Provider store={store}>
    {/* <TodoApp /> */}
  </Provider>
);

Затем снова протестируйте сборку. Если работает, значит проблема в пределах <TodoApp />. Если это не сработает, это означает, что проблема возникла где-то еще (возможно, из-за конфигурации и т. Д. c).

Теперь в TodoApp продолжите этот процесс: прокомментируйте половину компонента, протестируйте сборку , rince и повторяйте, пока не сузите поиск до последнего места, где возникла проблема.

Это всего лишь простой двоичный поиск, применяемый в контексте отладки.


Что было не так в ваш код?

Тем не менее, я потратил время, чтобы протестировать репозиторий, и проблема связана с компонентом TodoForm .

  return (
    // <div className="todo-form">
    //    <input
    //        ref={inputRef}
    //        type="text"
    //        placeholder='Enter new todo'
    //        onChange={event => handleInputOnChange(event)}
    //        onKeyPress={event => handleInputOnKeyPress(event)}
    //    />
    // </div>
    <div className={classes.root} style={{marginTop: '10px', marginBottom: '10px'}}>
      <form noValidate autoComplete="off">
        <div>

Комментарии в начале этого JSX-блока, возможно, неправильно преобразованы в окончательной сборке, что означает, что у компонента отсутствует допустимое возвращаемое значение.

Исправление состоит только в удалении этих комментариев.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...