2017-08-10 82 views
1

This article說:在JSX對象文本謹防ESLint規則禁止對象文本中JSX

一旦你的組件變得更「純」,你就開始檢測壞 模式,導致無用的重新渲染。最常見的是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。我經常用常量替換它。

所以我的問題是,是否有任何規則阻止在jsx中使用對象文字?

我試圖找到一個,但沒有結果。

回答

5

編輯

我發現這個插件https://github.com/cvazac/eslint-plugin-react-perfone 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:防止[...]作爲JSX道具價值
  • 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