【问题标题】:React-router route won't triggerReact-router 路由不会触发
【发布时间】:2018-01-02 14:41:34
【问题描述】:

首先,如果之前有人问过这个问题,我很抱歉。我目前是 react-router 的新手,我不知道该问什么。所以,我想在我的应用程序中制作一个侧边栏组件,这个侧边栏由 material-ui 抽屉 listItems 组成。每个 listItem 都有一个链接作为它的 containerElement 属性值。选择每个列表确实会更改 url,但不会显示每个路由应显示的组件。

这是我的代码:

App.js

import React, { Component } from 'react'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
import Sidebar from './components/Sidebar'
import {
  BrowserRouter as Router,
  Route,
} from 'react-router-dom'

var injectTapEventPlugin = require("react-tap-event-plugin");
injectTapEventPlugin();

const ListItem = () => (
  <div>
    <h2>List Item</h2>
  </div>
)

const CreateForm = () => (
  <div>
    <h2>Create Form</h2>
  </div>
)

const SearchItem = () => (
  <div>
    <h2>Search Item</h2>
  </div>
)

class App extends Component {
  render() {
    return (
      <MuiThemeProvider>
        <Router>
          <div>
            <Sidebar />
            <Route exact path="/" component={ListItem}/>
            <Route path="/create" component={CreateForm}/>
            <Route path="/search" component={SearchItem}/>
          </div>
        </Router>
      </MuiThemeProvider>
    )
  }
}

export default App;

Sidebar.js

import React, {Component} from 'react'
import Drawer from 'material-ui/Drawer'
import {List, ListItem, makeSelectable} from 'material-ui/List'
import Subheader from 'material-ui/Subheader'
import {Link} from 'react-router-dom'

let SelectableList = makeSelectable(List)

function wrapState(ComposedComponent) {
  return class SelectableList extends Component {
    componentWillMount() {
      this.setState({
        selectedIndex: this.props.defaultValue,
      })
    }

    handleRequestChange = (event, index) => {
      this.setState({
        selectedIndex: index,
      })
    }

    render() {
      return (
        <ComposedComponent
          value={this.state.selectedIndex}
          onChange={this.handleRequestChange}
        >
          {this.props.children}
        </ComposedComponent>
      )
    }
  }
}

SelectableList = wrapState(SelectableList)

const ListSelectable = () => (
  <SelectableList defaultValue={1}>
    <Subheader>Basic CRUD operation</Subheader>
    <ListItem
      value={1}
      primaryText="List"
      containerElement={<Link to='/'/>}
    />
    <ListItem
      value={2}
      primaryText="Create"
      containerElement={<Link to='/create'/>}
    />
    <ListItem
      value={3}
      primaryText="Search"
      containerElement={<Link to='/search'/>}
    />
  </SelectableList>
);

class Sidebar extends Component {
  render() {
    return (
      <Drawer>
        <ListSelectable />
      </Drawer>
    )
  }
}

export default Sidebar

注意:我从 material-ui 文档复制的可选列表实现。

【问题讨论】:

  • @James111 我访问了您提供的链接,并检查了他的示例存储库。实现与我的差别不大。任何提示为什么我的代码不起作用?
  • @James111 将我的路由移动到你给我的那个链接中使用的根组件仍然不起作用,显示的链接,url 改变了,但是路由组件没有被触发。
  • 我建议你遵循这样的教程:medium.com/@pshrmn/… 确保你的代码遵循 react-router 设置的正确规则!
  • @James111 哦,我的路线确实渲染了,它的渲染在 material-ui 抽屉后面。谢谢你的回复。

标签: reactjs react-router material-ui


【解决方案1】:

您的组件被侧边栏覆盖。试着在左边留一些边距。

import React, { Component } from 'react'
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider'
import Sidebar from './components/Sidebar'
import {
  BrowserRouter as Router,
  Route,
} from 'react-router-dom'

var injectTapEventPlugin = require("react-tap-event-plugin");
injectTapEventPlugin();

const ListItem = () => (
  <div>
    <h2 style={{marginLeft:'300'}}>List Item</h2>
  </div>
)

const CreateForm = () => (
  <div>
    <h2 style={{marginLeft:'300'}}>Create Form</h2>
  </div>
)

const SearchItem = () => (
  <div>
    <h2 style={{marginLeft:'300'}}>Search Item</h2>
  </div>
)

class App extends Component {
  render() {
    return (
      <MuiThemeProvider>
        <Router>
          <div>
            <Sidebar />
            <Route exact path="/" component={ListItem}/>
            <Route path="/create" component={CreateForm}/>
            <Route path="/search" component={SearchItem}/>
          </div>
        </Router>
      </MuiThemeProvider>
    )
  }
}

export default App;

【讨论】:

  • 是的,我刚看到。有什么方法可以使侧边栏绝对,所以我不需要添加边距?或者不同的material-ui组件?
猜你喜欢
  • 1970-01-01
  • 2017-10-06
  • 2019-11-13
  • 2018-12-27
  • 1970-01-01
  • 2018-08-22
  • 1970-01-01
  • 1970-01-01
  • 2020-01-19
相关资源
最近更新 更多