대응 구성 요소 라이브러리 렌더링 대응 링크
일부 프로젝트에서 사용하고 있는 리액션 컴포넌트 라이브러리를 개발했다.
그 중 하나가 스토리북이다. 그래서 나는 스토리북을 만들었다.BrowserRouter
내 이야기에 더하기 위한 장식가 그리고 구성 요소들은 단지 보여주고 노는 목적을 위해 완벽하게 표현된다.
그러나 다른 프로젝트에서 일부 구성 요소를 사용할 경우 다음과 같은 특징이 있다.BrowserRouter
내 앱 구성 요소 트리의 최상위 수준에서 다음 오류가 표시됨:
Error: Invariant failed: You should not use <Link> outside a <Router>
여기, 당신은 내가 나의 것으로부터 표현하려고 하는 것의 짧은 조각을 볼 수 있다.ConsumerProject
:
인덱스.js:
import React from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { LibraryComponent } from 'my-library';
const element = (
<HotEnabler>
<BrowserRouter>
<RouterTrigger trigger={pathname => triggerHooks(_routes, pathname)}>
<ApolloProvider client={client}>
<ApolloProviderHooks client={client}>
<LibraryComponent />
</ApolloProviderHooks>
</ApolloProvider>
</RouterTrigger>
</BrowserRouter>
</HotEnabler>
);
ReactDOM.render(element, destinationDomElement);
여기서 가장 중요한 부분을 볼 수 있다.MyLibrary
:
꾸러미json:
...
"peerDependencies": {
"react": ">=16.8.6",
"react-dom": ">=16.8.6",
"react-router": ">=5.0.0",
"react-router-dom": ">=5.0.0",
"styled-components": ">=4.1.0"
}
라이브러리구성 요소.js:
import React from 'react';
import PropTypes from 'prop-types';
import { Link } from 'react-router-dom';
import { SCLink } from './styles';
const LibraryComponent = props => {
return (
<Link
to={'/any-route/'}
>
Testing Links
</Link>
);
}
};
export default LibraryComponent;
나는 중요한 것을 추가하고 싶었다.
이 별칭을 의 웹 팩 구성에 추가하는 경우ConsumerProject
:
react: path.join(constants.ROOT_DIR, '../my-library/node_modules/react/'),
'react-dom': path.join(constants.ROOT_DIR, '../my-library/node_modules/react-dom/'),
'react-router-dom': path.join(constants.ROOT_DIR, 'node_modules/react-router-dom/')
모든 것이 잘 된다.추가하지 않으면 [반응] 및 [라우터 돔 반응]에서 오류가 발생한다.
나는 도서관에서 다음에 따라 구성요소가 있는 것과 같은 문제를 가지고 있었다.react-route-dom
몇 가지 조사를 한 후, 나는 내 프로젝트 앱에 2가지 버전이 있다는 결론을 내렸다.react-router-dom
번들(동일한 버전도)으로, 서로 충돌하는 2개의 컨텍스트 인스턴스를 생성한다.
내 경우 해결책은 움직이는 것이었다.react-router-dom
로peerDependencies
, 웹 팩 구성을 사용하여 라이브러리 빌드에서 제외:
externals: {
'react-router-dom': {
root: 'ReactRouterDom',
commonjs2: 'react-router-dom',
commonjs: 'react-router-dom',
amd: 'react-router-dom',
},
},
여기서 더 심층적인 정보가 발견되었다.
참조URL: https://stackoverflow.com/questions/56750633/react-components-library-rendering-react-links
'programing' 카테고리의 다른 글
페이지 새로 고침에서 다른 경로 vuej로 이동 (0) | 2022.03.30 |
---|---|
Vue v-On:클릭이 구성 요소에서 작동하지 않음 (0) | 2022.03.30 |
Vue에서 상태 변경 시 라우터에 의해 렌더링된 구성 요소를 변경하는 방법 (0) | 2022.03.30 |
python 3.x에서 string.replace()를 사용하는 방법 (0) | 2022.03.28 |
파이톤에서 끈을 연결하기 위해 선호하는 방법은 무엇인가? (0) | 2022.03.28 |