使用钩子在 Reactjs 中创建一个动态占位符

Posted

技术标签:

【中文标题】使用钩子在 Reactjs 中创建一个动态占位符【英文标题】:Make a dynamic placeholder in Reactjs using hooks 【发布时间】:2020-03-24 07:44:53 【问题描述】:

我想在我的input 字段中创建一个动态placeholder。 我有一个array 这样的过滤器:

const filters = [
    
        id: "rechercher",
        label: "Rechercher",
        icon: <SearchIcon />
    ,
    
        id: "contient",
        label: "Contient",
        icon: <DirectionsBoatIcon />
    ,
    
        id: "neContientPas",
        label: "Ne contient pas",
        icon: <AccountBalanceWalletIcon />
    ,
    
        id: "commencePar",
        label: "Commence par",
        icon: <BookmarksIcon />
    ,
    
        id: "finitPar",
        label: "Finit par",
        icon: <BrandingWatermarkIcon />
    ,
    
        id: "estEgal",
        label: "Est égal à",
        icon: <BusinessCenterIcon />
    ,
    
        id: "estPasEgal",
        label: "N'est pas égal à",
        icon: <CameraIcon />
    
];

当前过滤器的状态(使用钩子):

const [currentFilter, setCurrentFilter] = React.useState(<FilterListIcon/>);

dropdown 菜单选择过滤器:

<div className=classes.boxFilter>
    <IconButton onClick=handleClickDropdown('filter')>
        currentFilter
    </IconButton>
    <Menu
        id="simple-menu"
        anchorEl=anchorEl.filter
        keepMounted
        open=Boolean(anchorEl.filter)
        onClose=handleCloseDropdown
    >
        filters.map((element, idx) => 
            return (
                <MenuItem
                    key=idx
                    onClick=() => 
                        updateCurrentFilter(element.id);
                        setCurrentFilter(element.icon);
                        handleCloseDropdown();
                    
                    onClose=handleCloseDropdown
                    value=element.label
                >
                    element.icon
                    <span style=marginLeft: "0.5rem">element.label</span>
                </MenuItem>
            );
        )
    </Menu>
</div>

input 字段带有“非动态”placeholder

<Input
  placeholder="Filtre.."
  inputProps=
    "aria-label": "description"
  
/>

我想根据已选择的过滤器更改占位符。 我想做一个管理这个的功能,但我不知道该怎么做。 当我在input 领域时,我不在.map 之外,所以我不再知道了.. 欢迎您的帮助。

【问题讨论】:

stackblitz.com/fork/react 你能在那里建立你的项目吗,所以我可以看到 useState 和其他一切 你可以添加stackblitz 【参考方案1】:

您可以设置当前选定输入的状态:

声明:

const [selectedInput, setSelectedInput] = useState(null);

并且您只需要在单击菜单中的项目时使用setSelectedInput

在输入中:

<Input
  placeholder= selectedInput
  inputProps=
    "aria-label": "description"
  
/>

【讨论】:

以上是关于使用钩子在 Reactjs 中创建一个动态占位符的主要内容,如果未能解决你的问题,请参考以下文章

如何在反应钩子中创建一个新的 JSON 对象?

使用反应钩子在 REACTJS 中使用数组填充动态下拉列表的步骤

如何在 gatsby 中创建动态路由

如何使用钩子将 React 类组件转换为功能组件

ReactJS - 在 ReactJS 中创建一个 Util 函数以重用代码

在占位符字段中创建空间