当前位置: 首页 > 面试题库 >

反应:如何通过箭头键浏览列表

袁弘化
2023-03-14
问题内容

我已经建立了一个具有单个文本输入的简单组件,并且在该列表的下方(使用语义ui)构建了一个组件。

现在,我想使用箭头键浏览列表。

  • 首先,我必须选择第一个元素。但是,如何访问特定的列表元素?
  • 其次,我将获取当前所选元素的信息并选择下一个元素。如何获取选择了哪个元素的信息?

选择将意味着将类添加active到项目中,还是有更好的主意?

export default class Example extends Component {
    constructor(props) {
        super(props)
        this.handleChange = this.handleChange.bind(this)
        this.state = { result: [] }
    }
    handleChange(event) {
        // arrow up/down button should select next/previous list element
    }
    render() {
        return (
            <Container>
                <Input onChange={ this.handleChange }/>
                <List>
                    {
                        result.map(i => {
                            return (
                                <List.Item key={ i._id } >
                                    <span>{ i.title }</span>
                                </List.Item>
                            )
                        })
                    }
                </List>
            </Container>
        )
    }
}

问题答案:

尝试这样的事情:

export default class Example extends Component {
  constructor(props) {
    super(props)
    this.handleKeyDown = this.handleKeyDown.bind(this)
    this.state = {
      cursor: 0,
      result: []
    }
  }

  handleKeyDown(e) {
    const { cursor, result } = this.state
    // arrow up/down button should select next/previous list element
    if (e.keyCode === 38 && cursor > 0) {
      this.setState( prevState => ({
        cursor: prevState.cursor - 1
      }))
    } else if (e.keyCode === 40 && cursor < result.length - 1) {
      this.setState( prevState => ({
        cursor: prevState.cursor + 1
      }))
    }
  }

  render() {
    const { cursor } = this.state

    return (
      <Container>
        <Input onKeyDown={ this.handleKeyDown }/>
        <List>
          {
            result.map((item, i) => (
              <List.Item
                key={ item._id }
                className={cursor === i ? 'active' : null}
              >
                <span>{ item.title }</span>
              </List.Item>
            ))
          }
        </List>
      </Container>
    )
  }
}

光标会跟踪您在列表中的位置,因此当用户按下向上或向下箭头键时,您将相应地减小/增大光标。光标应与数组索引一致。

您可能希望onKeyDown观看箭头键而不是onChange,所以您不会延迟或混乱标准输入编辑行为。

在渲染循环中,您只需对照光标检查索引以查看哪个索引处于活动状态。

如果要基于来自字段的输​​入来过滤结果集,则可以在过滤集合时随时将光标重置为零,以便始终保持行为一致。



 类似资料:
  • 我是新来的反应js。我试图通过单击箭头键旋转图像。有人帮我,也分享一些学习反应js留档。 提前感谢。 我的代码 .js .module.css

  • 问题内容: 所有四个箭头键(左上右下)的utf8代码是什么? 我正在学习node.js,并且试图检测何时按下了这些键。 这是我的工作,但是没有一个能捕获箭头键…我是node.js的新手,所以我在这里可能做得很愚蠢。 谢谢。 问题答案: 您可以使用按键包。尝试页面上给出的示例。 您可以按顺序获取箭头键的UTF-8值。

  • 问题内容: 我正在开发Web应用程序,我需要与其他浏览器分开标识Microsoft Edge的浏览器,以应用独特的样式。有没有一种使用CSS识别Edge的方法?就像, 问题答案: / * Microsoft Edge浏览器12-18(Chromium之前的所有版本)* / 这应该工作:

  • 我正在用Extbase构建一个TYPO3扩展,并希望存储通过httpget获取的数据。现在我正在努力使用浏览器访问动作控制器。 插件被实现到第102页 扩展键是xyzlist 插件名称是xyzlistdb 控制器名称是playlicontroller 操作是getAction 域名是sub.domain。de 在播放控制器中。php仅在getAction下 错误日志(“getAction”,0)

  • 问题内容: 我正在研究用于网络抓取的python脚本,并且没有使用Chromedriver作为软件包之一。我希望此操作无需任何弹出窗口即可在后台运行。我在chromedriver上使用了“无头”选项,它似乎在不显示浏览器窗口的情况下完成了工作,但是,我仍然看到.exe文件正在运行。查看我在说什么的屏幕截图。屏幕截图 这是我用来启动ChromeDriver的代码: 我尝试做的事情是将选项中的窗口大小