web-dev-qa-db-ja.com

react-router 4とスタイル付きコンポーネントをreactで使用する場合、RouterまたはwithRouter()をルーターの外部で使用しないでください。

私は最初のポートフォリオWebサイトを構築しようとしていますが、react-router-dom 4.2.2とstyled-components 2.2.3を使用したルーティングにこだわっています。

エラーメッセージ:RouteまたはwithRouter()をルーターの外部で使用しないでください

また、NavLinkの代わりにLinkを使用しようとしましたが、エラーも発生しました(ルーターの外でLinkを使用しないでください

誰か助けてください。

navigationBar.js

import React, { Component } from 'react';
import { NavigationContainer, NavItem } from './navigationBar.style';

class NavigationBar extends Component {
  render() {
    return (
      <NavigationContainer>
        <NavItem to="/">Home</NavItem>
        <NavItem to="/projects">Project</NavItem>
      </NavigationContainer>
    );
  }
}

export default NavigationBar;

navigationBar.style.js

import styled from 'styled-components';
import { Flex, Div } from 'theme/grid';
import { NavLink } from 'react-router-dom';

export const NavigationContainer = styled(Flex)`
  position: fixed;
  right: 20px;
  top: 0.5em;
  font-size: 1em;  
`;
export const NavItem = styled(NavLink)`
  position: relative;
  padding-left: 10px;
  cursor: pointer;
`;
31
JongHun Lee

メインのリアクションレンダリングコードをルーターでラップしていることを確認してください。たとえば、react-domを使用する場合は、ブラウザールーターでアプリをラップする必要があります。これがUdacityプロジェクトの場合、これは通常index.jsファイルです。

import { BrowserRouter } from 'react-router-dom';

ReactDOM.render(
   <BrowserRouter>
     <App />
   </BrowserRouter>

  , document.getElementById('root'));
32
Bruce Seymour

さて、あなたはNavLinkBrowserRouter // HashRouterの外で使用しています

自分で言った

ルーターの外部でリンクを使用しないでください

このような構造になっていることを確認してください

// App render or whatever
render() {
  return (
    <BrowserRouter>
       <NavigationBar />
       {`whatever else you doin'`}
    </BrowserRouter>
  );
}

常にルーター内でレンダリングする必要があります

11
João Cunha