Semantic-UI Sidebar.Pusher заставляет реагирующий маршрутизатор повторно отображать свой компонент

Я использую реагирующий маршрутизатор и боковую панель semantic-ui. Когда боковая панель переключается между видимой и невидимой, маршрутизатор инициирует воссоздание своего компонента (OilBarrelComponent) (а не просто «отправляет»). Это кажется ненужным и имеет побочные эффекты, которые мне не нужны. Что-то не так с моим кодом, из-за которого компонент OilBarrelContainer воссоздается только потому, что я переключаю боковую панель?

import {BrowserRouter as Router, Route, Link, Switch} from 'react-router-dom';
import {Sidebar, Segment, Button, Menu, Icon} from 'semantic-ui-react'

  toggleSidebarVisibility = () => this.setState({ sidebarVisible: !this.state.sidebarVisible })

  render() {
    const { sidebarVisible } = this.state

    return (
    <Router history={history}>
      <div>
        <Sidebar.Pushable className="phsidebar" as={Segment}>
          <Sidebar as={Menu} animation='push' width='thin'  visible={sidebarVisible} icon='labeled' vertical inverted>
            <Menu.Item className="sidebaritem" as={Link} to='/oilbarrel'>
              Gauge
            </Menu.Item>
          </Sidebar>
          <Sidebar.Pusher>
            <div>
              <MessagesContainer/>
              <Switch>
                <Route exact path="/" component={() => (<Home />)}/>
                <Route exact path="/oilbarrel" component={() => (<OilBarrelContainer timer={true} topMargin={0} width={300} height={400} labelText={"Diesel"}/>)}/>
              </Switch>
            </div>
          </Sidebar.Pusher>
        </Sidebar.Pushable>
      </div>

    </Router>
    )};

person zakum1    schedule 12.07.2017    source источник


Ответы (1)


Я подозреваю, что ваши реквизиты <Route> component являются функциями, а не просто ссылкой на классы компонентов.

т.е. вместо

component={() => (<Home />)}

Я считаю, что это должно быть

component={Home}

Я считаю, что первый способ повторно отображает совершенно новый компонент при каждом рендеринге, поэтому React не может утверждать, что повторный рендеринг не нужен.

person Will Hawker    schedule 12.07.2017