为了账号安全,请及时绑定邮箱和手机立即绑定

React 使用 Typescript 创建动态引用

React 使用 Typescript 创建动态引用

繁星点点滴滴 2021-10-14 11:04:21
我有一个table列表,其中每一行都有一个menu按钮,为此我需要一个ref. 我在我的项目中使用 react mui,它是menu。我试过像这样创建参考:const {rows} = props;const refs = Array.from({length: rows.length}, a => React.useRef<HTMLButtonElement>(null));然后尝试map在每个函数上使用像这样的内部函数button:<Button   ref={refs[index]}   aria-controls="menu-list-grow"   aria-haspopup="true"   onClick={() => handleToggle(row.id)}>Velg</Button>  <Popper open={!!checkIfOpen(row.id)} anchorEl={refs[index].current} keepMounted transition disablePortal>    {({TransitionProps, placement}) => (       <Grow        {...TransitionProps}        style={{transformOrigin: placement === 'bottom' ? 'center top' : 'center bottom'}}>       <Paper id="menu-list-grow">         <ClickAwayListener onClickAway={(e) => handleClose(e, refs[index].current)}>          <MenuList>                                                                    <MenuItem             onClick={(e) => handleClose(e, refs[index].current)}>Profile</MenuItem>           <MenuItem onClick={(e) => handleClose(e, refs[index].current)}>My account</MenuItem>           <MenuItem onClick={(e) => handleClose(e, refs[index].current)}>Logout</MenuItem>        </MenuList>      </ClickAwayListener>    </Paper>  </Grow> )}</Popper>但是,然后我收到一个错误:React Hook "React.useRef" 不能在回调中调用。React Hooks 必须在 React 函数组件或自定义 React Hook 函数中调用 react-hooks/rules-of-hooks我怎样才能动态地做到这一点,以便我可以在 map 函数中使用 refs。我已经尝试过答案中的建议,但我无法让它发挥作用。这是示例的代码和框。
查看完整描述

2 回答

?
慕运维8079593

TA贡献1876条经验 获得超5个赞

这是另一种选择:


const textInputRefs = useRef<(HTMLDivElement | null)[]>([])


...


const onClickFocus = (event: React.BaseSyntheticEvent, index: number) => {

    textInputRefs.current[index]?.focus()

};


...

{items.map((item, index) => (

    <textInput

        inputRef={(ref) => textInputs.current[index] = ref}

    />

    <Button

        onClick={event => onClickFocus(event, index)}

    />

}


查看完整回答
反对 回复 2021-10-14
  • 2 回答
  • 0 关注
  • 245 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信