鍍金池/ 問答/HTML/ React項(xiàng)目中,一段代碼求優(yōu)化

React項(xiàng)目中,一段代碼求優(yōu)化

import React from 'react';
import ReactDOM from 'react-dom';
import './assets/styles/index.less';

import Green from './assets/images/green.png';
import Red from './assets/images/red.png';

class Circle extends React.Component {

    constructor() {
        super();
        this.state = {
            safety: []
        }
    }

    render() {

        const _self = this;

        //console.log('_self.props.styleSet =', _self.props.styleSet)
        let divStyle = {
            //
        }

        let safetyData = {};



        if(this.state.safety.length !== 0) {
            this.state.safety.map(function (item) {
                safetyData[item['name']] = item['value']
            })
        }



        let cI = Red


        return (
                <div
                    ref={(elem) => { this.element = elem; }}
                    className={'safety_div'}
                >
                    <div className={'safety_title'}>
                        <div className={'item item1'}>已處理漏洞數(shù)</div>
                        <div className={'item item2'}>基線配置不當(dāng)數(shù)</div>
                        <div className={'item item3'}>暴力破解數(shù)</div>
                        <div className={'item item4'}>弱口令數(shù)</div>
                    </div>


                    <div className={'safety_img'}>
                        <div
                            className={'item item1'}
                        >
                            <img src={safetyData['handle'] === 0?Red:Green} />
                        </div>
                        <div
                            className={'item item1'}
                        >
                            <img src={safetyData['configuration'] === 0?Red:Green} />
                        </div>
                        <div
                            className={'item item1'}
                        >
                            <img src={safetyData['violentBreak'] === 0?Red:Green} />
                        </div>
                        <div
                            className={'item item1'}
                        >
                            <img src={safetyData['weakPassword'] === 0?Red:Green} />
                        </div>
                    </div>

                    <div className={'safety_figure'}>
                        <div
                            className={'item item1'}
                            style = {{
                                color: safetyData['handle'] === 0?'#FF2366':'#2AF4FF'
                            }}
                        >
                            {safetyData['handle']}
                        </div>
                        <div
                            className={'item item2'}
                            style = {{
                                color: safetyData['configuration'] === 0?'#FF2366':'#2AF4FF'
                            }}
                        >
                            {safetyData['configuration']}
                        </div>
                        <div
                            className={'item item3'}
                            style = {{
                                color: safetyData['violentBreak'] === 0?'#FF2366':'#2AF4FF'
                            }}
                        >
                            {safetyData['violentBreak']}
                        </div>
                        <div
                            className={'item item4'}
                            style = {{
                                color: safetyData['weakPassword'] === 0?'#FF2366':'#2AF4FF'
                            }}
                        >
                            {safetyData['weakPassword']}
                        </div>
                    </div>

                </div>

        )
    }

    componentDidMount() {
        //
    }

    componentWillReceiveProps(nextProps) {  // 接收新的參數(shù)
        //console.log(nextProps.data);
        this.setState({
            safety: nextProps.safety
        });
    }

    componentDidUpdate() {
        //
    }
}


export default Circle;

回答
編輯回答
心悲涼

優(yōu)化點(diǎn):

  1. 組件使用Array.map方法優(yōu)化,
  2. componentReciveProps 這個(gè)不需要
  3. 在render中減少計(jì)算,使用react 計(jì)算屬性寫法

比如:

if(this.state.safety.length !== 0) {
            this.state.safety.map(function (item) {
                safetyData[item['name']] = item['value']
            })
        }

可更改為

get computedSafetyDate() {
    ...
    }
  1. 減少組件無謂的更新判斷
  2. 減少組件內(nèi)部使用bind, 箭頭函數(shù)(因?yàn)檫@些在js中會重新重建一個(gè)函數(shù),降低性能)

暫時(shí)就這么多了

2017年11月28日 02:30
編輯回答
傲寒

你大概需要優(yōu)化那些重復(fù)的div吧.

<div className={'safety_img'}>
{
    safetyData.map(item => {
        return(
            <div className={'item item1'} key={item}>
                <img src={item === 0?Red:Green} />
            </div>
        );
    })
}
</div>

<div className={'safety_figure'}>
    {
        safetyData.map((item, i) => {
            return(
                <div className={`item item${i+1}`}
                   style = {{color: item === 0?'#FF2366':'#2AF4FF'}}>
                     {item}
                </div>
            );
        })
    }
</div>
2018年8月9日 23:23