3 回答
TA贡献1943条经验 获得超7个赞
我找到了解决方法。我的技术类似于@canda:
import React, { Component } from "react";
import { render } from "react-dom";
import "./style.css";
import Select, { components } from "react-select";
const options = [
{ value: "England", label: "England", icon: "england.svg" },
{ value: "Germany", label: "Germany", icon: "germany.svg" }
];
const { Option } = components;
const IconOption = props => (
<Option {...props}>
<img
src={require('./' + props.data.icon)}
style={{ width: 36 }}
alt={props.data.label}
/>
{props.data.label}
</Option>
);
class App extends Component {
constructor() {
super();
this.state = {
name: "React"
};
}
render() {
return (
<Select
defaultValue={options[0]}
options={options}
components={{ Option: IconOption }}
/>
);
}
}
render(<App />, document.getElementById("root"));
TA贡献1803条经验 获得超3个赞
以防万一有人想在 中使用多选图标,react-select可以使用以下代码:
const { MultiValue } = components;
const MultiValueOption = (props) => {
return (
<MultiValue {...props}>
<img
src={require("./" + props.data.icon)}
style={{ width: 36 }}
alt={props.data.label}
/>
<span>{props.data.value}</span>
</MultiValue>
);
};
<Select
options={options}
components={{
Option: IconOption,
MultiValue: MultiValueOption,
}}
isMulti={true}
></Select>;
TA贡献1816条经验 获得超6个赞
我认为问题在于您实际上并未导入 SVG。如果您尝试<IconFlagGermany/>
在代码中的任何地方直接使用,它会因以下消息而严重崩溃:
元素类型无效:应为字符串(对于内置组件)或类/函数(对于复合组件)但得到:未定义。您可能忘记从定义组件的文件中导出组件,或者您可能混淆了默认导入和命名导入。
它目前没有崩溃,因为我认为您的customSingleValue
功能没有按照您的预期工作(还没有研究它,但很确定它被窃听了)。
如果您希望能够以这种方式导入 SVG,您需要在 Webpack(或您选择的打包器)中设置一个合适的加载器。也许是这样的:https : //www.npmjs.com/package/react-svg-loader
但是,另一种解决方案是将您的 SVG 正确导出为组件,就像从您的代码中分叉的这个演示中一样:https : //stackblitz.com/edit/react-5gvytm
添加回答
举报