Реквизит пустой в root компоненте - PullRequest
0 голосов
/ 06 марта 2020

В приложении React мне нужно передать свои реквизиты моим компонентам маршрута, но по какой-то причине они приходят пустыми. Поэтому в VendingMachine, когда я пытаюсь получить доступ к своим реквизитам, в них ничего нет. Пустые массивы и объекты. Я установил фиктивную базу данных для работы с некоторыми данными.

index. js

import React from 'react';
import { render } from 'react-dom';
import './index.css';
import { BrowserRouter as Router } from 'react-router-dom';
import { Provider } from 'react-redux';
import App from './App';
import 'bootstrap/dist/css/bootstrap.min.css';
import configureStore from './redux/store/configureStore';

const store = configureStore();

render(
  <Provider store={store}>
    <Router>
      <App />
    </Router>
  </Provider>,
  document.getElementById('root'),
);

Приложение. js

import React from 'react';
import { Route, Switch } from 'react-router-dom';
import './App.css';
import VendingMachine from './components/machine/VendingMachine';
import AboutPage from './components/about/AboutPage';

function App() {
  return (
    <div className="container-fluid">
      <Switch>
        <Route exact path="/" component={AboutPage} />
        <Route path="/machine" component={VendingMachine} />
      </Switch>
    </div>
  );
}

export default App;

VendingMachine. js, где после проверки моего console.log в начале все реквизиты пусты

import React, { useEffect } from 'react';
import { connect } from 'react-redux';
import './VendingMachine.css';
import PropTypes from 'prop-types';
import { bindActionCreators } from 'redux';
import VendingItems from './VendingItemsContainer';
import VendingInput from './VendingInputContainer';
import * as itemsActions from '../../redux/actions/itemsActions';
import { get } from '../../http/http';
import { handleResponse } from '../../api/apiUtils';

const baseUrl = 'http://localhost:3001/machine';

function VendingMachine(props) {
  console.log('ITEMS IN VM', props);
  const {
    items,
    actions,
    loadItems,
    updateItem,
  } = props;

  useEffect(() => {
    get(baseUrl).then((data) => {
      if (items.length === 0) {
        actions.loadItems().catch((error) => {
          alert(`Loading courses failed${error}`);
        });
      }

    });

  }, [actions, items.length, loadItems, props]);

  return (
    <div className="container">
      <div className="row">
        <div className="column">
          <VendingItems items={items} loadItems={loadItems} />
        </div>
        <div className="column">
          <VendingInput
            items={items}
            updateItem={updateItem}
          />
        </div>
      </div>
    </div>
  );
}

VendingMachine.propTypes = {
  items: PropTypes.array.isRequired,
  loadItems: PropTypes.func.isRequired,
  updateItem: PropTypes.func.isRequired,
};

function mapStateToProps(state, ownProps) {
  return {
    items: state.items
  };
}

function mapDispatchToProps(dispatch) {
  return {
    actions: {
      loadItems: bindActionCreators(itemsActions.loadItems, dispatch)
    },
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(VendingMachine);

А что касается моего apiServer. js

const express = require('express');

const low = require('lowdb');
const FileSync = require('lowdb/adapters/FileSync');

const adapter = new FileSync('src/tools/db.json');
const db = low(adapter);

const cors = require('cors');

const itemRouter = express.Router();
const app = express();

const port = process.env.PORT || 3001;

app.use(cors());

itemRouter.route('/machine')
  .get((req,res) => {
    const response = db.getState();
    // const response = db.getState().items;
    // const response = { hello: 'hello all' };
    res.json(response);
  });
itemRouter.route('/machine/:id')
  .get((req,res) => {
    const response = db.getState();
    res.json(response);
  });
app.use(itemRouter);

app.get('/', (req, res) => {
  res.send('Hello World');
});

app.get('/machine', (req, res) => {
  const dbState = db.getState();
  res.send(dbState);
});

app.listen(port, () => {
  console.log(`JSON Server is running on port ${port}`);
});

Что это я отсутствует или делает неправильно?

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