Приложение React js ничего не отображает после настройки redux

#reactjs #react-redux

#reactjs #react-redux

Вопрос:

Я создал приложение react с помощью create-react-app, и оно отображало страницу по умолчанию. Я изменил app.js для моих нужд и настройки redux. После этого, когда я запускаю команду npm start, в консоли отображается только пустая страница и нет сообщения об ошибке.

App.js

 import React, { Component } from "react";
import "./App.css";
import { Router, Route, Redirect } from "react-router";
import { Provider } from "react-redux";
import {store} from "./store/index";
import Home from "./components/common/Home";
import {history} from './store/index'



class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <Router history={history} >
         <Route path='/home' Component={Home}></Route>
       </Router>
      </Provider>
    );
  }
}

export default App;
  

index.js

 import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
import {store} from "./store/index";
import * as serviceWorker from './serviceWorker';
import './css/index'
import { Router, Route, Redirect } from "react-router";

ReactDOM.render(

<App store={store}/>


, document.getElementById('root'));


serviceWorker.unregister();
  

store.js

 import { createStore,applyMiddleware } from "redux";
import rootReducer from "../reducers/index";
import createHistory from 'history/createBrowserHistory';
import thunk from 'redux-thunk';
import {createLogger} from 'redux-logger';



const getMiddleware =()=>{
 return applyMiddleware(thunk,createLogger())
}
export const history = createHistory();


export const store= createStore(rootReducer,getMiddleware());
  

reducer:

 const initialState = {
    articles: []
};

function rootReducer(state = initialState, action) {
  return state;
};
export default rootReducer;
  

Я не смог определить, где я ошибаюсь.Буду признателен за любую помощь.

Комментарии:

1. Похоже, вам не хватает маршрута по умолчанию для path «/». Единственный присутствующий маршрут — это путь «/ home».

2. даже с путем по умолчанию «/» я получаю тот же результат

3. также это новое приложение? похоже, вы используете старую версию react-router

4. кроме того, возможно, это не связано, но все же стоит упомянуть, что вы передаете store в качестве реквизита в <App /> , но вы его не используете .. вы импортируете store как статический импорт в App.js

5. кроме того … вы импортируете history из индексного файла хранилища? что это значит

Ответ №1:

Попробуйте настроить свой App.js компонент следующим образом:

 import React from "react";
import { BrowserRouter, Route } from "react-router-dom";

import Home from "./components/common/Home";
  

Обратите внимание, что я не использовал react-router , я использовал react-router-dom , это то, что вы должны использовать. react-router является основной библиотекой, которая поддерживает react-router-dom и react-router-dom-native . используйте react-router-dom .

Обратите внимание, у меня нет store никаких Provider настроек, мы собираемся оставить это для вашего корневого index.js файла. Теперь остальная часть вашего App компонента будет выглядеть следующим образом:

 const App = () => {
  render() {
    return (
      <div className="ui container">
       <BrowserRouter>
         <div>
          <Route path="/" exact component={Home} />
         </div>
       </BrowserRouter>
    );
  }
}

export default App;
  

Теперь перейдем к вашему корневому index.js файлу:

 import React from "react";
import ReactDOM from "react-dom";
import { Provider } from "react-redux";
import { createStore } from "redux";

import App from "./components/App";
import reducers from "./reducers";

const store = createStore(reducers);

ReactDOM.render(
  <Provider store={store}>
    <App />
  </Provider>,
  document.querySelector("#root")
);
  

Вот где вы размещаете свои Provider и store . Я просто устранил необходимость в store.js файле, в этом нет необходимости.

Теперь внутри вашего первого редуктора, поскольку вам нужен какой-то тип редуктора, чтобы ваше приложение загружалось и не зависало, вы можете просто написать такой внутри reducers/index.js :

 import { combineReducers } from "redux";

export default combineReducers({
  replaceMe: () => "howdy"
});
  

Теперь у вас есть полностью работающее приложение React-Redux без ошибок, вы можете продвигаться вперед со своим проектом.

Ответ №2:

Если у вас нет действительно веских причин для создания собственного history объекта, используйте объекты BrowserRouter или HashRouter, которые экспортируются из react-router-dom

И для того, чтобы расставить вещи в нужных местах.. импортируйте хранилище, в котором вы фактически установили его в качестве поставщика, вместо того, чтобы импортировать его дважды.

// app.js

 import React, { Component } from "react";
import "./App.css";
import { BrowserRouter, Route, Redirect } from "react-router-dom";
import { Provider } from "react-redux";
import { store } from "./store/index";
import Home from "./components/common/Home";

class App extends Component {
  render() {
    return (
      <Provider store={store}>
        <BrowserRouter>
          <Route path='/home' Component={Home}></Route>
        </BrowserRouter>
      </Provider>

    );
  }
}

export default App;
  

// index.js

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

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

Комментарии:

1. Я внес эти изменения .. но все равно я вижу только пустую страницу

2. попробуйте <Route exact path="/" component={Home} />

3. Получаете ли вы пустую страницу при запуске сервера разработки через npm start и переходе на localhost? или путем обслуживания папки сборки каким-то образом, где-то