te')); return $arr; } /* 遍历用户所有主题 * @param $uid 用户ID * @param int $page 页数 * @param int $pagesize 每页记录条数 * @param bool $desc 排序方式 TRUE降序 FALSE升序 * @param string $key 返回的数组用那一列的值作为 key * @param array $col 查询哪些列 */ function thread_tid_find_by_uid($uid, $page = 1, $pagesize = 1000, $desc = TRUE, $key = 'tid', $col = array()) { if (empty($uid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('uid' => $uid), array('tid' => $orderby), $page, $pagesize, $key, $col); return $arr; } // 遍历栏目下tid 支持数组 $fid = array(1,2,3) function thread_tid_find_by_fid($fid, $page = 1, $pagesize = 1000, $desc = TRUE) { if (empty($fid)) return array(); $orderby = TRUE == $desc ? -1 : 1; $arr = thread_tid__find($cond = array('fid' => $fid), array('tid' => $orderby), $page, $pagesize, 'tid', array('tid', 'verify_date')); return $arr; } function thread_tid_delete($tid) { if (empty($tid)) return FALSE; $r = thread_tid__delete(array('tid' => $tid)); return $r; } function thread_tid_count() { $n = thread_tid__count(); return $n; } // 统计用户主题数 大数量下严谨使用非主键统计 function thread_uid_count($uid) { $n = thread_tid__count(array('uid' => $uid)); return $n; } // 统计栏目主题数 大数量下严谨使用非主键统计 function thread_fid_count($fid) { $n = thread_tid__count(array('fid' => $fid)); return $n; } ?>javascript - react-router-bootstrap linkcontainer - Stack Overflow
最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - react-router-bootstrap linkcontainer - Stack Overflow

programmeradmin3浏览0评论

How do I use react-router-bootstrap to link to another react ponent? Do I need to set up my routes with react-router first? I don't know how to use react-router-bootstrap's LinkContainer to route a NavItem to a separate react ponent.

import React, { Component } from 'react';
import { Navbar, Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap';
import request from 'superagent';
import CardList from './CardList.jsx';
import AddNewCard from './AddNewCard.jsx';
import ReactRouterBootstrap, { LinkContainer } from 'react-router-bootstrap';

const propTypes = {
  children: React.PropTypes.element,
}

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      cards: [],
    }
    this.addNewCardHandler = this.addNewCardHandler.bind(this);
    this.deleteCardHandler = this.deleteCardHandler.bind(this);
    this.saveButtonHandler = this.saveButtonHandler.bind(this);
  }

  ponentDidMount() {
    this.getAllCards();
  }

  getAllCards() {
    const url = '/api/cards';
    request.get(url)
    .end((err,res) => {
      if (err) {
        console.log(`err: ${err}`);
      }
      this.setState({
        cards: res.body,
      });
    });
  }
  deleteCardHandler(id) {
    console.log(`id: ${id}`);
  }
  addNewCardHandler() {
    request.post(url)
      .send({
        firstname,
        lastname,
        email,
        phonenumber,
        location,
        jobtitle,
        pany,
        githubhandle,
        linkedinhandle,
        twitterhandler,
        personalsite,
      })
      .end((err, res) => {
        console.log(`res: ${res}`);
        console.log(`err: ${err}`);
      })
  }

  saveButtonHandler(){
    console.log('saveButtonHandler')
  }
  render() {
    return (
      <div>
        <Navbar inverse collapseOnSelect>
          <Navbar.Header>
            <Navbar.Brand>
              <a href="#">BIZIT</a>
            </Navbar.Brand>
          </Navbar.Header>
          <Navbar.Collapse>
            <Nav>
              <NavItem eventKey={1} href="#">Filter</NavItem>
              <NavItem eventKey={2} href="#">Search</NavItem>
            </Nav>
            <Nav pullRight>
              <NavItem eventKey={1} href="#">Sign Up</NavItem>
              <NavItem eventKey={2} href="#">Login</NavItem>
            </Nav>
          </Navbar.Collapse>
        </Navbar>
        <CardList
          saveButtonHandler={this.saveButtonHandler}
          cards={this.state.cards}
          />
        <Navbar inverse collapseOnSelect fixedBottom>
          <Navbar.Collapse>
            <Nav>
              <NavItem eventKey={4} href="#">Home</NavItem>
              <NavItem eventKey={5} href="#">Profile</NavItem>
              <LinkContainer to="/AddNewCard">
                <NavItem eventKey={6}>Add Card</NavItem>
              </LinkContainer>
              <NavItem eventKey={7} href="#">Saved Cards</NavItem>
            </Nav>
          </Navbar.Collapse>
        </Navbar>
      </div>
    )
  }

}

App.propTypes = propTypes;
export default App;
<script src=".1.0/react.min.js"></script>
<script src=".1.0/react-dom.min.js"></script>

How do I use react-router-bootstrap to link to another react ponent? Do I need to set up my routes with react-router first? I don't know how to use react-router-bootstrap's LinkContainer to route a NavItem to a separate react ponent.

import React, { Component } from 'react';
import { Navbar, Nav, NavItem, NavDropdown, MenuItem } from 'react-bootstrap';
import request from 'superagent';
import CardList from './CardList.jsx';
import AddNewCard from './AddNewCard.jsx';
import ReactRouterBootstrap, { LinkContainer } from 'react-router-bootstrap';

const propTypes = {
  children: React.PropTypes.element,
}

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      cards: [],
    }
    this.addNewCardHandler = this.addNewCardHandler.bind(this);
    this.deleteCardHandler = this.deleteCardHandler.bind(this);
    this.saveButtonHandler = this.saveButtonHandler.bind(this);
  }

  ponentDidMount() {
    this.getAllCards();
  }

  getAllCards() {
    const url = '/api/cards';
    request.get(url)
    .end((err,res) => {
      if (err) {
        console.log(`err: ${err}`);
      }
      this.setState({
        cards: res.body,
      });
    });
  }
  deleteCardHandler(id) {
    console.log(`id: ${id}`);
  }
  addNewCardHandler() {
    request.post(url)
      .send({
        firstname,
        lastname,
        email,
        phonenumber,
        location,
        jobtitle,
        pany,
        githubhandle,
        linkedinhandle,
        twitterhandler,
        personalsite,
      })
      .end((err, res) => {
        console.log(`res: ${res}`);
        console.log(`err: ${err}`);
      })
  }

  saveButtonHandler(){
    console.log('saveButtonHandler')
  }
  render() {
    return (
      <div>
        <Navbar inverse collapseOnSelect>
          <Navbar.Header>
            <Navbar.Brand>
              <a href="#">BIZIT</a>
            </Navbar.Brand>
          </Navbar.Header>
          <Navbar.Collapse>
            <Nav>
              <NavItem eventKey={1} href="#">Filter</NavItem>
              <NavItem eventKey={2} href="#">Search</NavItem>
            </Nav>
            <Nav pullRight>
              <NavItem eventKey={1} href="#">Sign Up</NavItem>
              <NavItem eventKey={2} href="#">Login</NavItem>
            </Nav>
          </Navbar.Collapse>
        </Navbar>
        <CardList
          saveButtonHandler={this.saveButtonHandler}
          cards={this.state.cards}
          />
        <Navbar inverse collapseOnSelect fixedBottom>
          <Navbar.Collapse>
            <Nav>
              <NavItem eventKey={4} href="#">Home</NavItem>
              <NavItem eventKey={5} href="#">Profile</NavItem>
              <LinkContainer to="/AddNewCard">
                <NavItem eventKey={6}>Add Card</NavItem>
              </LinkContainer>
              <NavItem eventKey={7} href="#">Saved Cards</NavItem>
            </Nav>
          </Navbar.Collapse>
        </Navbar>
      </div>
    )
  }

}

App.propTypes = propTypes;
export default App;
<script src="https://cdnjs.cloudflare./ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare./ajax/libs/react/15.1.0/react-dom.min.js"></script>

Share Improve this question asked Dec 1, 2016 at 19:38 TomTom 531 gold badge2 silver badges6 bronze badges
Add a ment  | 

3 Answers 3

Reset to default 12

I just faced the same problem here. Yes you do have to set up react-router as if you were not using react-router-bootstrap. For your application (guessing you just want same level paths with the NavItens u set) I think it will be something like this (assuming that you're rendering your app's ponent in a div with id="app"):

ReactDOM.render((
<Router history={browserHistory}>
    <Route path="/" ponent={App}>
        <IndexRoute ponent={Home} />
        <Route path="/Filter" ponent={Filter} />
        <Route path="/Signup" ponent={Signup} />
        <Route path="/Login" ponent={Login} />
        <Route path="/Profile" ponent={Profile} />
        <Route path="/Search" ponent={Search} />
        <Route path="/AddNewCard" ponent={AddNewCard} />
        <Route path="/SavedCard" ponent={SavedCard} /> 
   </Route>
</Router>
), document.getElementById('app'))

You have to put react-bootstrap's NavItens inside react-router-bootstrap's LinkContainers. If you have an index link you should use IndexLinkContainers instead. But if you want a link in your Navbar.Brand(which is your case), the best solution I found was to replace the Navbar.Brand for a react-router Link with className='nav-bar-brand'.

This is how I guess your solution should be:

<Navbar inverse collapseOnSelect>
      <Navbar.Header>
        <Link to='#' className='navbar-brand'>BIZIT</Link>
      </Navbar.Header>
      <Navbar.Collapse>
        <Nav>
          <LinkContainer to="Filter">
              <NavItem eventKey={1}>Filter</NavItem>
          </LinkContainer>
          <LinkContainer to="Search">
              <NavItem eventKey={2}>Search</NavItem>
          </LinkContainer>
        </Nav>
        <Nav pullRight>
          <LinkContainer to="/Signup">
              <NavItem eventKey={1}>Sign Up</NavItem>
          </LinkContainer>
          <LinkContainer to="/Login">
              <NavItem eventKey={2}>Login</NavItem>
          </LinkContainer>
        </Nav>
      </Navbar.Collapse>
    </Navbar>
    <CardList
      saveButtonHandler={this.saveButtonHandler}
      cards={this.state.cards}
      />
    <Navbar inverse collapseOnSelect fixedBottom>
      <Navbar.Collapse>
        <Nav>
          <LinkContainer to="/">
              <NavItem eventKey={4}>Home</NavItem>
          </LinkContainer>
          <LinkContainer to="/Profile">
              <NavItem eventKey={5}>Profile</NavItem>
          </LinkContainer>
          <LinkContainer to="/AddNewCard">
            <NavItem eventKey={6}>Add Card</NavItem>
          </LinkContainer>
          <LinkContainer to="/SavedCard">
              <NavItem eventKey={7}>Saved Cards</NavItem>
          </LinkContainer>
        </Nav>
      </Navbar.Collapse>
    </Navbar>

If you don't need react-router-bootstrap, you may use

import { BrowserRouter, Routes, Route } from "react-router-dom";
...
ReactDOM.render(
  <BrowserRouter>
    <Navigation />
    <Routes>
      <Route path="/path" element={<Path_Function />} />
    </Routes>
  </BrowserRouter>,
  document.getElementById('root')
);

While inside navigation

import 'bootstrap/dist/css/bootstrap.min.css';
import { Container, Nav, Navbar } from 'react-bootstrap';
import { Outlet, NavLink } from 'react-router-dom';
...
   <Nav.Link as={NavLink} to="/path">Path Name</Nav.Link>
...

Please be aware that every Link including NavLinks and LinksContainers must be a child to Router ponent. My problem was in placing the nav outside the router as a standalone ponent.

发布评论

评论列表(0)

  1. 暂无评论