【发布时间】:2019-11-22 13:55:58
【问题描述】:
我想将 props 从一个组件传递到另一个组件,并在第二个组件中使用它来进行组件声明上方的导入
这是为了使用相同的组件,无需创建 4 次,每次使用另一个 SVG。
我正在使用 React、Javascript、Webpack、babel。
我还使用 svgr/webpack 从 SVG 图片创建组件,使用 SVG 而不是 对我来说至关重要。
import React from 'react';
import RightNavItem from './right_nav_item';
const RightNav = ({navitems}) => {
const rightNavItems = navitems.map( (item) => {
return <RightNavItem name={ item }/>
});
return(
<div className="rightnav">
{rightNavItems}
</div>
);
};
.
export default RightNav;
import React from 'react';
const RightNavItem = ({ name }) => {
const svgpath = `../../../../resources/img/navbar/${name}.svg`;
return(
<div>
<img src={ svgpath } style={{height: '25px'}}/>
<span>{ name }</span>
</div>
);
};
export default RightNavItem;
而我希望能够做到这一点:
import React from 'react';
import SvgPicture from '../../../../resources/img/navbar/{name}.svg';
const RightNavItem = ({ name }) => {
return(
<div>
<SvgPicture />
<span>{ name }</span>
</div>
);
};
export default RightNavItem;
.
【问题讨论】:
-
您可以使用上下文来减少对支柱钻孔的需求:reactjs.org/docs/context.html
-
我不认为 javascript 支持这样的动态导入。您也许可以在 SvgComponent 的渲染函数中使用 require(path/to/svg)。如果是这样,那么您可以将路径作为道具传递。
-
查看 create-react-app docs 名为 添加 SVGs 的部分,您没有使用 create-react-app,但您可以了解解决方案
-
感谢您的帮助,我设法做到了,虽然有点丑陋,但还是做到了。我使用了 {props.children},而不是使用 map(),而是添加了 4 次
,每个都有不同的“SVG”子组件和不同的道具“名称”,这样组件只会在 RightNavItem 初始化等级。我将对解决方案发表评论,希望有人能告诉我如何使用 map() 来做到这一点。再次感谢!!
标签: reactjs svg webpack import babeljs