javascript - 如何使用 React-select 创建单独的 DropdownIndicator 组件,以便它可以在项目的其他部分重用
问题描述
当我将 DropdownIndicator 组件保存在同一个文件中时,以下代码可以正常工作。
但我想将 DropdownIndicator 保存在单独的文件中,以便可以重复使用。就像将其保持为单独的组件并在其他文件中使用它,例如在下拉字段中显示插入符号向上和向下图标的任何地方。
类似的例子如下
import ReactDOM from "react-dom";
import Select, { components } from "react-select";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import { faCaretDown, faCaretUp } from "@fortawesome/free-solid-svg-icons";
import { library } from "@fortawesome/fontawesome-svg-core";
import "./styles.css";
library.add(faCaretDown);
library.add(faCaretUp);
const colourOptions = [
{
label: "Orange",
value: "orange"
},
{
label: "Blue",
value: "blue"
},
{
label: "Purple",
value: "purple"
}
];
const Placeholder = (props) => {
return <components.Placeholder {...props} />;
};
let isOpen = false;
const CaretDownIcon = () => {
return <FontAwesomeIcon icon="caret-down" />;
};
const CaretUpIcon = () => {
return <FontAwesomeIcon icon="caret-up" />;
};
const DropdownIndicator = (props) => {
return (
<components.DropdownIndicator {...props}>
{isOpen ? <CaretDownIcon /> : <CaretUpIcon />}
</components.DropdownIndicator>
);
};
function App() {
return (
<div className="App">
<Select
closeMenuOnSelect={false}
onMenuOpen={() => (isOpen = true)}
onMenuClose={() => (isOpen = false)}
components={{ Placeholder, DropdownIndicator }}
placeholder={"Choose"}
styles={{
placeholder: (base) => ({
...base,
fontSize: "1em",
color: colourOptions[2].value,
fontWeight: 400
})
}}
options={colourOptions}
/>
</div>
);
}
const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
解决方案
首先,您持有 isOpen 标志的方式并不理想,因为它会使所有当前选择的指标发生变化。
要提取组件,您可以利用传递给自定义 DropdownIndicator 的选择道具并使用它而不是您的标志。
这是一个工作沙箱:
推荐阅读
- html - 引导带覆盖自定义导航栏
- python - 删除特定 url 路径的身份验证和权限
- safari - 澄清什么是 safari 经典模式?
- powershell - 使用 PowerShell 的 Windows 10 版本更新
- swift - SwiftUI 在预览 macOS 目标时排除 Swift 包
- c++ - 如何在 gmock 中测试失败
- r - 如何将for循环与我在R中制作的函数结合起来
- go - 如何将 tlsConfig 与 RoundTripper 一起使用?
- python - 非常基本的 Python 语法
- python - 如何在Python中获取列表中重复元素的最高索引值