前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >React 无障碍

React 无障碍

作者头像
用户4793865
发布2023-01-12 15:40:32
2350
发布2023-01-12 15:40:32
举报
文章被收录于专栏:前端小菜鸡yym前端小菜鸡yym

这是我参与11月更文挑战的第20天,活动详情查看:2021最后一次更文挑战

无障碍

JSX 支持所有 aria-* HTML 属性。虽然大多数 React 的 DOM 变量和属性命名都使用驼峰命名(camelCased),但 aria-* 应该像其在 HTML 中一样使用带连字符的命名法(也叫诸如 hyphen-cased,kebab-case,lisp-case)。

语义化的 HTML

语义化的 HTML 是无障碍辅助功能网络应用的基础。 利用多种 HTML 元素来强化您网站中的信息通常可以使您直接获得无障碍辅助功能。

有时,语义化的 HTML 会被破坏。比如当在 JSX 中使用 <div> 元素来实现 React 代码功能的时候,又或是在使用列表(<ol>, <ul> 和 <dl>)和 HTML <table> 时。 在这种情况下,我们应该使用 React Fragments 来组合各个组件

Fragments

Fragments React组件返回多个元素,Fragments允许将子列表分组,而无需向DOM添加额外节点。(有可能没理解,不要紧,上代码)

父组件

代码语言:javascript
复制
class Table extends React.Component{
    render(){
        return(
            <table>
                <tr>
                    <Columns/>
                </tr>
            </table>
        )
    }
}

子组件Columns return中需要有最外层标签,所以需要添加<div>

代码语言:javascript
复制
class Columns extends React.Component{
    render(){
         return(
             <div>
                 <td>1</td>
                 <td>2</td>
             </div>
         )
    }
}

可以发现<div>也会被添加进去,但是这不是我们想要的。

image.png
image.png

将子组件的<div>换成<Fragment>

代码语言:javascript
复制
import React, { Fragment } from 'react';
class Columns extends React.Component{
    render(){
         return(
             <Fragment>
                <li>1</li>
                <li>2</li>
             </Fragment>
         )
    }
}
image.png
image.png

短语法

用看似空标签<> </>代替<Fragment></Fragment>,但是其不支持key属性

代码语言:javascript
复制
import React from 'react';
class Columns extends React.Component{
    render(){
         return(
             <>
                <li>1</li>
                <li>2</li>
             </>
         )
    }
}

Fragments key属性

<Fragment>被写入到遍历中时,同样控制台会提示我们需要唯一的key。因此我们也需要为其添加key属性。

代码语言:javascript
复制
class Columns extends React.Component {
  constructor(props) {
    super(props)
    this.state = {"data":[
      {'id':1}
      ,{'id':2}
    ]}
  }
  render() {
    return(
      <div>
        {
          this.state.data.map((item)=>(
            <Fragment >
              <li>{item.id}</li>
            </Fragment>
          ))
        }
      </div>
    )
  }
}
image.png
image.png

key 是唯一可以传递给 Fragment 的属性, <Fragment key={item.id}>

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-11-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 无障碍
  • 语义化的 HTML
    • Fragments
      • 短语法
        • Fragments key属性
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档