小编fjp*_*urr的帖子

控件必须与文本标签相关联

我收到错误:

控件必须与文本标签相关联。

这段代码是:

 <i
   role="button"
   className={classN}
   onClick={this.muteVolume}
   onKeyDown={this.muteVolume}
 />
Run Code Online (Sandbox Code Playgroud)

该错误与此 eslint 规则有关

当使用标签和关联的控件时,该规则是有意义的。就我而言,我根本不需要标签。我可以创建一个,但在我看来这是一种避免出现该错误的解决方法。

问题是什么?

编辑

正如@rickdenhaan 所指出的,要应用的正确规则是这个

javascript reactjs eslint airbnb-js-styleguide

21
推荐指数
1
解决办法
2万
查看次数

在 Typescript 中使用默认值解构属性

假设我有一个这样定义的类型:

type gridProps = {
  itemsArrayFiltered: object[],
  cardWidth: number,
  cardHeight: number
}
Run Code Online (Sandbox Code Playgroud)

我有一个像这样的 React 组件:

const Grid = 
  ({ itemsArrayFiltered, cardWidth = 280, cardHeight }: gridProps) => 
(whatever)
Run Code Online (Sandbox Code Playgroud)

如果我没有在 gridProps 类型中提供 cardWidth 属性,则会收到错误消息:

类型“gridProps”上不存在属性“cardWidth”。ts(2339)

这是正确的,但问题是:提供默认值 280 是否还不够?我觉得我通过提供数字默认值并在 gridProps 类型中写入数字来重复代码。有没有更好的方法来避免这种情况?

javascript typescript reactjs

13
推荐指数
1
解决办法
1万
查看次数

使用 webpack 的 Typescript 中的 ts-loader 与 babel-loader

所以我试图比较这两种组合的输出编译代码。

ts-loader

  {
    test: /\.tsx?$/,
    use: 'ts-loader',
  }
Run Code Online (Sandbox Code Playgroud)

babel-loader

  use: {
      loader: 'babel-loader',
      options: {
        presets:
          [
            "@babel/preset-react",
            "@babel/preset-typescript",
          ]
      }
    }
Run Code Online (Sandbox Code Playgroud)
  • 我得到 babel-loader 的编译时间低于 ts-loader。
  • 此外,ts-loader 看起来在幕后使用 babel,至少它在它的依赖项中。
  • 此外,babel-loader 允许将缓存与cacheDirectory一起使用

问题

  1. 有没有办法像babel 中的cacheDirectory一样在 ts-loader 中使用缓存?
  2. 使用 ts-loader 而不是 babel-loader 有什么其他好处?

typescript webpack babeljs ts-loader babel-loader

10
推荐指数
1
解决办法
1036
查看次数

反应路由器中 location.state 的类型或接口

在一个组件中,有一个<Link>(来自 react-router-dom)在 state 属性中传递一个对象。

调用的另一个组件ReceiverComponent是正确接收该对象。但是,下面的代码抱怨消息:

类型“PoorMansUnknown”不可分配给类型“locationStateProps”。类型 'undefined' 不可分配给类型 'locationStateProps'.ts(2322)

type locationStateProps = {
  name: string;
}

function ReceiverComponent() {
  const location = useLocation();
  const myState: locationStateProps = location.state;
  return (
    <div>
      {myState.name}
    </div>
  );
}
Run Code Online (Sandbox Code Playgroud)

我需要以某种方式为状态提供一种类型,而不会出现此错误。如何进行?

typescript reactjs react-router react-router-dom

6
推荐指数
2
解决办法
3147
查看次数

'FC' 已定义但从未使用过.eslint (no-unused-vars)

我从 eslint 收到此警告:

X 已定义但从未用于从 react 或 react-native 导入的每种类型。带有FC和的示例ViewProps(见下图)。

这是我的 .eslintrc.js:

module.exports = {
  env: {
    browser: true,
    es6: true,
    node: true,
  },
  extends: [
    'airbnb',
    "plugin:import/typescript",
  ],
  parser: "@typescript-eslint/parser",
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaFeatures: {
      jsx: true,
    },
    ecmaVersion: 2018,
    sourceType: 'module',
  },
  plugins: [
    'react',
  ],
  rules: {
    "react/jsx-filename-extension": [1, { "extensions": [".js", ".jsx", ".ts", ".tsx"] }],
    "linebreak-style": 0,
    "jsx-a11y/label-has-associated-control": ["error", {
      "required": {
        "some": ["nesting", "id"]
      }
    }], …
Run Code Online (Sandbox Code Playgroud)

typescript reactjs eslint

2
推荐指数
1
解决办法
1525
查看次数