首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React:在作为node_module导入的共享组件库中使用node_module

React:在作为node_module导入的共享组件库中使用node_module
EN

Stack Overflow用户
提问于 2020-10-02 20:05:21
回答 1查看 630关注 0票数 4

我有一个可以工作的共享组件库,我使用node_module将它作为package.json导入到我的前端应用程序中。

我已经构建了一个使用PaginationLinksNavLink组件。

PaginationLinks.js (在共享组件库中)

代码语言:javascript
复制
import { NavLink } from 'react-router-dom';

const PaginationLinks = {
  return (
    <Container>
      ...
      <NavLink to={"/"}>Home</NavLink>
    </Container>
  );
};

export default PaginationLinks;

在我的前端应用程序中,我已经在我的工作应用程序中设置了反应性路由器和所有这些设置:

routes.js

代码语言:javascript
复制
import { Route, Switch, Redirect } from 'react-router';
import React from 'react';
import { history } from './redux/store';
import { ConnectedRouter } from 'connected-react-router';
...

function App() {
  return (
    <ConnectedRouter history={history}>
      <Switch>
        <BasePage>
          <Switch>
            <Route
              exact
              path="/"
              component={HomePage}
            />
            ...
          </Switch>
        </BasePage>
      </Switch>
    </ConnectedRouter>
  );
}

FYI,这已经是一个应用程序,我有现有的路线和导入NavLink没有问题。

然而,当我试图将我的组件导入我的应用程序时,它在抱怨我的NavLink不在路由器内:

Error: Invariant failed: You should not use <NavLink> outside a <Router>

代码语言:javascript
复制
import React from 'react';
import { NavLink } from 'react-router-dom';
import PaginationLinks from '@my-lib/ui/components/PaginationLinks';
import H1 from '@my-lib/ui/components/H1';

const HomePage = () => (
  <div>
    <H1>hello</H1> // this works
    <NavLink to="/somewhere">somewhere</NavLink> // this works
    <PaginationLinks /> // this breaks the app
  </div>;

)

代码语言:javascript
复制
export default HomePage;

如何在共享组件库中使用NavLink?在共享组件库中将PaginationLinks封装在路由器中是没有意义的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-17 15:24:00

我通过使用peerDependencies +将这些依赖项移动到devDependencies来修复它。我的假设是,节点将按照以下顺序扫描依赖项:

  1. dependencies在我的共享组件库的package.json
  2. dependencies中,在我的React应用程序

因此,我必须将routing库移动到devDependencies中,这样我仍然可以在本地运行我的故事书服务器,并且在我的react应用程序中仍然正确地加载共享组件node_module。

这是我的package.json

代码语言:javascript
复制
  "name": "mypackage",
  "version": "0.6.3",
  "dependencies": {
    ...
  },
  "peerDependencies": {
    "react": "^16.13.1",
    "styled-components": "^4.4.1",
    "react-dom": "^16.12.0",
    "react-router": "^5.2.0",
    "react-router-dom": "^5.2.0"
  },
  "scripts": {
    "start": "start-storybook -p 9009",
    "eslint": "eslint --ignore-path .gitignore ./",
    "eslint:fix": "eslint --fix --ignore-path .gitignore ./",
    "prettier": "prettier -c ./",
    "prettier:fix": "prettier --write ./"
  },
  ...
  "devDependencies": {
    ...
    "react": "^16.13.1",
    "styled-components": "^4.4.1",
    "react-dom": "^16.12.0",
    "react-router": "^5.2.0",
    "react-router-dom": "^5.2.0"
  },
  "husky": {
    "hooks": {
      "pre-commit": "pretty-quick --staged",
      "pre-push": "npm run eslint"
    }
  }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64177642

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档