@nafanya_old

Откатить версию bootstrap или изменить код?

Привет, использую код из урока. https://github.com/ericvicenti/intro-to-react

Failed to compile
./src/App.js
Attempted import error: 'Grid' is not exported from 'react-bootstrap'.

Проблема из-за несовместимости версий бутстрапа, где Grid заменили на Container?
Откатить версию бутсрап не выходит.
Что еще можно предпринять?

import React, { Component } from "react";
import "./App.css";
// import "bootstrap/dist/css/bootstrap.css";
import "bootswatch/journal/bootstrap.css";

import { Navbar, NavItem, Nav, Grid, Row, Col } from "react-bootstrap";

const PLACES = [
  { name: "Palo Alto", zip: "94303" },
  { name: "San Jose", zip: "94088" },
  { name: "Santa Cruz", zip: "95062" },
  { name: "Honolulu", zip: "96803" }
];

class WeatherDisplay extends Component {
  constructor() {
    super();
    this.state = {
      weatherData: null
    };
  }
  componentDidMount() {
    const zip = this.props.zip;
    const URL = "http://api.openweathermap.org/data/2.5/weather?q=" +
      zip +
      "&appid=b1b35bba8b434a28a0be2a3e1071ae5b&units=imperial";
    fetch(URL).then(res => res.json()).then(json => {
      this.setState({ weatherData: json });
    });
  }
  render() {
    const weatherData = this.state.weatherData;
    if (!weatherData) return <div>Loading</div>;
    const weather = weatherData.weather[0];
    const iconUrl = "http://openweathermap.org/img/w/" + weather.icon + ".png";
    return (
      <div>
        <h1>
          {weather.main} in {weatherData.name}
          <img src={iconUrl} alt={weatherData.description} />
        </h1>
        <p>Current: {weatherData.main.temp}°</p>
        <p>High: {weatherData.main.temp_max}°</p>
        <p>Low: {weatherData.main.temp_min}°</p>
        <p>Wind Speed: {weatherData.wind.speed} mi/hr</p>
      </div>
    );
  }
}

class App extends Component {
  constructor() {
    super();
    this.state = {
      activePlace: 0
    };
  }
  render() {
    const activePlace = this.state.activePlace;
    return (
      <div>
        <Navbar>
          <Navbar.Header>
            <Navbar.Brand>
              React Simple Weather App
            </Navbar.Brand>
          </Navbar.Header>
        </Navbar>
        <Grid>
          <Row>
            <Col md={4} sm={4}>
              <h3>Select a city</h3>
              <Nav
                bsStyle="pills"
                stacked
                activeKey={activePlace}
                onSelect={index => {
                  this.setState({ activePlace: index });
                }}
              >
                {PLACES.map((place, index) => (
                  <NavItem key={index} eventKey={index}>{place.name}</NavItem>
                ))}
              </Nav>
            </Col>
            <Col md={8} sm={8}>
              <WeatherDisplay key={activePlace} zip={PLACES[activePlace].zip} />
            </Col>
          </Row>
        </Grid>
      </div>
    );
  }
}

export default App;
  • Вопрос задан
  • 517 просмотров
Пригласить эксперта
Ответы на вопрос 2
fallus
@fallus
Можно удалить бустрап:
spoiler
(и забыть о нём вообще навсегда. И руки вымыть после)

npm uninstall react-bootstrap
А потом установить нужный:
npm i react-bootstrap@0.32.0
0.32.0 — та версия, где Grid ещё не переименовали в Container
https://react-bootstrap.github.io/migrating/#summa...

И да, я провёл расследование.
Ответ написан
Комментировать
@satone
Может кому еще понадобиться: заменить Navbar.Brand и Grid на Container и вместо:
<Nav bsStyle="pills" stackedactiveKey={activePlace}onSelect={index => {this.setState({ activePlace: index });}}>
    {PLACES.map((place, index) => (<NavItem key={index} eventKey={index}>{place.name}</NavItem>))}
</Nav>

поставить:
<Nav variant="pills" defaultActiveKey={activePlace} onSelect={index => { this.setState({ activePlace: index }); }}>
    {PLACES.map((place, index) => (<Nav.Item key={index}><Nav.Link key={index} eventKey={index}>{place.name}</Nav.Link></Nav.Item>))}
</Nav>
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы