代码之家  ›  专栏  ›  技术社区  ›  Dan Cantir

ESLint规则禁止JSX中的对象文字

  •  2
  • Dan Cantir  · 技术社区  · 8 年前

    This article 说:

    一旦你的组件变得更纯净,你就开始检测坏的 导致无用重播的模式。最常见的是用法 JSX中的对象文字,我喜欢称之为臭名昭著的{

    import React from 'react'; 
    import MyTableComponent from './MyTableComponent';
    
    const Datagrid = (props) => (
         <MyTableComponent style={{ marginTop: 10 }}>
             ...
         </MyTableComponent> 
     )
    

    每次打开组件时,组件的样式属性都会获得一个新值 提供。所以即使是纯的,它也会被渲染 每次渲染。事实上,每次你通过 对象文字作为子组件的道具,会破坏纯度。这个

    import React from 'react'; 
    import MyTableComponent from  './MyTableComponent';
    
    const tableStyle = { marginTop: 10 }; 
    
    const Datagrid = (props) => (
         <MyTableComponent style={tableStyle}>
             ...
         </MyTableComponent> 
    ) 
    

    这看起来很基本,但我多次看到这个错误,以至于我>开发了检测

    所以我的问题是,有没有任何规则阻止在jsx中使用对象文字?

    我正试图找到一个,但还没有结果。

    1 回复  |  直到 8 年前
        1
  •  7
  •   Dawid Karabin    8 年前

    编辑

    我找到了这个插件 https://github.com/cvazac/eslint-plugin-react-perf one comment 本文如下: React.js pure render performance anti-pattern .

    • react-perf/jsx-no-new-object-as-prop :防止{…}作为JSX属性值
    • react-perf/jsx-no-new-array-as-prop
    • react-perf/jsx-no-new-function-as-prop :阻止函数作为JSX属性值
    • react-perf/jsx-no-jsx-as-prop :防止JSX作为JSX属性值


    https://github.com/yannickcr/eslint-plugin-react

    现在你可以使用 jsx-no-bind render 因此,由于这条规则,您还可以防止组件中出现额外渲染。

    https://github.com/yannickcr/eslint-plugin-react/blob/master/docs/rules/jsx-no-bind.md