React 15项目在使用版本16的React组件库中表现不佳

邦妮

我有一个很大的React项目(项目A),并且正在创建一个要在该项目中使用的组件库(项目B)。项目B使用依赖项“ reactive-active-carousel”创建了一个幻灯片显示卡,我想在多个项目中使用它,包括项目A。

在Project B的故事书中查看时,幻灯片和卡片看起来很棒,并且可以按预期工作。当将卡组件(位于项目B中)加载到项目A中时,我遇到以下反应错误(以及损坏的幻灯片):“无法在未安装的组件上找到节点。”

如果我删除了使用第三方依赖关系的幻灯片放映,则反应消失,错误消失,我可以在Project A中看到我的卡。我既使用了npm链接,也通过本地文件路径安装了依赖关系,并且不良行为会同时发生。

项目B(组件库)正在使用React 16.3.2。项目A正在使用React 15.6.2。

我曾尝试将Project A的React版本降级到15.6.2,但这会导致Storybook出错,我想继续使用它来共享组件目录。

将项目A更新到16.3.2是有可能的,但是我现在不愿意这样做,因为存在通过引入新版本的React破坏项目A的风险。该解决方案在这里介绍:我的项目(反应15)可以使用使用react 16的依赖项吗?

我可以使用对等依赖项解决此问题吗?是否弃用了对等依赖关系?我还有其他可以解决的潜在解决方案,还是应该吸收并更新Project A?

根据要求,下面是一些代码。我已经简化了很多,只尝试保留与此问题有关的内容。

项目B的依赖项:

"devDependencies": {
    "@storybook/addon-knobs": "^3.3.13",
    "@storybook/react": "^3.4.0",
    "react": "^16.3.2",        
    "react-dom": "^16.3.1",
    "react-hot-loader": "^4.2.0",
    "react-redux": "^5.0.7",
    "react-responsive-carousel": "^3.1.37",
    "styled-components": "^3.2.5"
  }

项目A的依赖项:

"devDependencies": {
    "my-component-library": "file:../../my-component-library",
    "react": "^15.6.2",
    "react-addons-create-fragment": "^15.6.0",
    "react-addons-css-transition-group": "^15.6.0",
    "react-addons-test-utils": "^15.6.0",
    "react-dom": "^15.6.2",
    "react-responsive-carousel": "3.1.34",
  }

项目B中的卡片组件:

    import React from 'react';
    import styled from 'styled-components';

    import { Carousel } from 'react-responsive-carousel';

    //styled components css/js for 
    //CardContainer that has been taken out to keep the post short

    const Card = ({
        stuff, 
        stuff, 
        stuff //simplified for post
    }) => {
        return (
        <CardContainer>
            <div className="carousel-container">

                <Carousel 
                    showThumbs={false}
                    showStatus={false}
                    emulateTouch={true}
                    infiniteLoop={true}> 
                        <img src="whatever.jpg" />
                        <img src="whatever.jpg" />
                        <img src="whatever.jpg" />
                </Carousel>
            </div>
        </CardContainer>
        );
    };
export default Card;

在Project B中,我只是导入卡并使用它:

import { Card } from 'my-component-library';
<Card stuff={stuff} />
托马斯·穆拉奇奇(Tomasz Mularczyk)

我可以使用对等依赖项解决此问题吗?是否弃用了对等依赖关系?我还有其他可以解决的潜在解决方案,还是应该吸收并更新Project A?

如果那是版本冲突,那么可以肯定-您应该使用peerDependencies它们,因为它们不被弃用,这对它们来说是一个非常好的用例-这就是为什么create-react-appnextjs之类的框架不会将哪个版本的强加给您应该在您的项目中使用,但是您可以安装项目所需的特定版本。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章