[解決済み] react-router-bootstrap linkcontainer
2022-02-11 05:59:24
質問
react-router-bootstrapを使って、他のリアクトコンポーネントにリンクするにはどうすればよいですか?最初にreact-routerでルートを設定する必要がありますか?react-router-bootstrapのLinkContainerを使って、NavItemを別のリアクトコンポーネントにルーティングする方法が分かりません。
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);
}
componentDidMount() {
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,
company,
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.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
解決方法は?
私もちょうど同じ問題に直面しました。react-router-bootstrapを使用していない場合と同様に、react-routerをセットアップする必要があります。あなたのアプリケーションの場合(NavItens uが設定された同じレベルのパスが欲しいだけだと思います)、次のようなものになると思います(アプリのコンポーネントをid="app"でdivにレンダリングしていると仮定しています)。
ReactDOM.render((
<Router history={browserHistory}>
<Route path="/" component={App}>
<IndexRoute component={Home} />
<Route path="/Filter" component={Filter} />
<Route path="/Signup" component={Signup} />
<Route path="/Login" component={Login} />
<Route path="/Profile" component={Profile} />
<Route path="/Search" component={Search} />
<Route path="/AddNewCard" component={AddNewCard} />
<Route path="/SavedCard" component={SavedCard} />
</Route>
</Router>
), document.getElementById('app'))
react-bootstrapのNavItensは、react-router-bootstrapのLinkContainersの中に入れる必要があります。インデックスリンクがある場合は、IndexLinkContainersを代わりに使う必要があります。しかし、Navbar.Brandにリンクが欲しい場合(あなたの場合)、私が見つけた最良の解決策は、Navbar.BrandをclassName='nav-bar-brand'のreact-router Linkに置き換えることです。
このように、あなたのソリューションはあるべき姿だと思います。
<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>
関連
-
[解決済み] テスト
-
[解決済み] Reactルータを使ったプログラムによるナビゲーション
-
[解決済み] React JSX内のループ
-
[解決済み] Reactのこの3つの点は何をするところなのでしょうか?
-
[解決済み] React-routerのURLを更新したり、手動で書き込んだりするとうまくいかない
-
[解決済み] React NativeとReactの違いは何ですか?
-
[解決済み] クエリ文字列からパラメータ値を取得する方法は?
-
[解決済み] React Router v4で履歴にプッシュする方法は?
-
[解決済み] react-router - ハンドラコンポーネントにpropsを渡す
-
[解決済み】オプションのパスパラメータを持つReact Router
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] 解決済み】clearInterval()が動作しない [重複] [重複]
-
[解決済み】XMLHttpRequestモジュールが定義されていない/見つからない
-
[解決済み】JavaScript "Uncaught TypeError: object is not a function" 連想性の質問
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】 Uncaught Error: Invariant Violation: 解決済み】 Uncaught Error: Invariant Violation: Element type is invalid: expected a string (for built-in components) or a class/function but got: object.
-
[解決済み】TypeError: res.status は関数ではありません。
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】Syntax error: JavaScriptの不正なreturnステートメント
-
[解決済み】 \u003C とは何ですか?