国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專(zhuān)欄INFORMATION COLUMN

React 組件開(kāi)發(fā)入門(mén)

imccl / 2586人閱讀

摘要:實(shí)現(xiàn)中間圓心基本樣式容器元件樣式圓心樣式生成動(dòng)畫(huà)元件元件個(gè)數(shù),定制個(gè)數(shù)元件元素集合生成組件自己的樣式模擬渲染基本動(dòng)畫(huà)元件的,控制交互最后,下面是基本的不考慮不支持的情況,不支持都不用開(kāi)發(fā),直接用圖,性?xún)r(jià)比更高里面用到的一個(gè)混淆方法

前言

熟悉 React 的思想后,我們先來(lái)嘗試開(kāi)發(fā)一個(gè)單純的小組件,可以對(duì)比一下是不是比以前的開(kāi)發(fā)模式更加舒適了,這里我主要以一個(gè) Loadding 組件來(lái)舉栗子,實(shí)現(xiàn)了幾個(gè)基本的功能:

一種類(lèi)型的 loadding(菊花轉(zhuǎn))

能夠設(shè)置 loadding 的三個(gè)屬性:width height color

能夠控制 loadding 的顯示和隱藏

其實(shí)對(duì)于一個(gè)簡(jiǎn)單需求來(lái)說(shuō),這三個(gè)屬性已經(jīng)很實(shí)用了。但是去網(wǎng)上看一些外國(guó)大神寫(xiě)的組件,有一些不明白的地方,所以自己就慢慢搞,do it!

設(shè)計(jì)

我想這樣用 loadding 組件:

所以我定義這個(gè)組件的基本結(jié)構(gòu)如下:

var Loadding = React.createClass({
    // 控制組件屬性的類(lèi)型
    propTypes: {},
    // 控制組件屬性的默認(rèn)值
    getDefaultProps: function () {},
    // 組裝基本的內(nèi)聯(lián)樣式
    getComponentStyle: function () {},
    // 渲染基本的組件,拆分 render 方法的粒度
    renderBaseComp: function () {},
    // 最終的渲染方法
    render: function () {}
});

這個(gè)組件中,我使用的 內(nèi)聯(lián)樣式 來(lái)控制組件的內(nèi)部基本樣式的穩(wěn)定。其實(shí)有時(shí)候我們會(huì)覺(jué)得內(nèi)聯(lián)樣式不好,但是我個(gè)人覺(jué)得每一種設(shè)置 CSS 形式的方法,用在合適的場(chǎng)景中就是正確的。

每部分的具體實(shí)現(xiàn)如下,代碼中有一些講解(這里我不會(huì)介紹具體 loadding 效果是怎么出來(lái)的,看代碼應(yīng)該就會(huì)明白,主要介紹一個(gè) react 制作簡(jiǎn)單組件的思路和寫(xiě)法)對(duì)于擴(kuò)展性來(lái)說(shuō),

你還可以加入 className 和 type 這些修飾性的屬性,但是我更傾向于迭代式的組件開(kāi)發(fā),小組件就要具有良好的封閉性,使用接口簡(jiǎn)單,大組件才考慮更好的魯棒性和可擴(kuò)展性,這樣開(kāi)發(fā)一個(gè)組件的性?xún)r(jià)比才高。需要注意對(duì) getDefaultProps 的理解,只有當(dāng)使用接口的人代碼中根本沒(méi)有寫(xiě)那個(gè)屬性的時(shí)候,才會(huì)使用定義的默認(rèn)值。

實(shí)現(xiàn)
var Loadding = React.createClass({
    propTypes: {
        width: React.PropTypes.oneOfType([
            React.PropTypes.number,
            React.PropTypes.string
        ]),
        height: React.PropTypes.oneOfType([
            React.PropTypes.number,
            React.PropTypes.string
        ]),
        color: React.PropTypes.string,
        active: React.PropTypes.bool
    },
    getDefaultProps: function() {
        return {
            color: "#00be9c",
            height: 30,
            width: 30,
            active: false
        };
    },

    getComponentStyle: function() {
        var width = this.props.width,
            height = this.props.height,
            color = this.props.color;
        /* 中間圓心 */
        var cWidth = 0.4 * width,
            cHeight = 0.4 * height,
            cMarginLeft = -0.5 * cWidth,
            cMarginTop = -0.5 * cHeight;

        /* 基本樣式 */
        return {
            loaddingStyle: { // loadding 容器
                width: width,
                height: height
            },
            lineStyle: { // loadding 元件樣式
                background: color
            },
            centerStyle: { // loadding 圓心樣式
                width: cWidth,
                height: cHeight,
                marginLeft: cMarginLeft,
                marginTop: cMarginTop
            }
        };
    },

    renderBaseComp: function(compStyle) {
        /* 生成動(dòng)畫(huà)元件 */
        var n = 4; // 元件個(gè)數(shù),todo: 定制個(gè)數(shù)
        var lines = []; // 元件元素集合
        for (var i = 0; i < n; i++) {
            lines.push(
                
); } return lines; }, render: function() { /* 生成組件自己的樣式 */ var compStyle = this.getComponentStyle(); /* 模擬渲染基本動(dòng)畫(huà)元件 */ var lines = this.renderBaseComp(compStyle); // loadding 的class,控制交互 var loaddingClasses = cx({ loadding: true, active: this.props.active }); return (
{lines}
); } });

最后,下面是基本的 SASS(不考慮不支持的情況,不支持都不用開(kāi)發(fā),直接用圖,性?xún)r(jià)比更高)

@include keyframes(load) {
    0% {
        opacity: 0;
    }
    25% {
        opacity: .25;
    }
    50% {
        opacity: .5;
    }
    75% {
        opacity: .75;
    }
    100% {
        opacity: 1;
    }
}

.loadding {
    display: none;
    position: absolute;
    &.active {
        display: block;
    }
    .loadding-center {
        position: absolute;
        left: 0;
        top: 50%;
        background: #fff;
        border-radius: 50%;
    }
    .line {
        position: absolute;
        top: 0;
        left: 0;
        height: 100%;
        .top {
            content: "";
            display: block;
            width: 1px;
            font-size: 0;
            height: 50%;
        }
        .bottom {
            @extend .top;
        }
        @for $i from 1 through 4 {
            &:nth-child(#{$i}) {
                transform:rotate(45deg * ($i - 1));
                .top {
                    @include animation(load, 0.8s, linear, 0s, infinite);
                }
                .bottom {
                    @include animation(load, 0.8s, linear, 0.4s + $i/10, infinite);
                }
            }
        }
    }
}

里面用到的一個(gè) animation 混淆方法:

@mixin keyframes($name) {
    @-webkit-keyframes #{$name} {
        @content;
    }
    @-moz-keyframes #{$name} {
        @content;
    }
    @-ms-keyframes #{$name} {
        @content;
    }
    @keyframes #{$name} {
        @content;
    }
}

@mixin animation ($name, $duration, $func, $delay, $count, $direction: normal) {
    -webkit-animation: $name $duration $func $delay $count $direction;
    -moz-animation: $name $duration $func $delay $count $direction;
    -o-animation: $name $duration $func $delay $count $direction;
    animation: $name $duration $func $delay $count $direction;
}

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/78202.html

相關(guān)文章

  • react入門(mén)學(xué)習(xí)筆記(一)

    摘要:選擇的主要原因大概是因?yàn)樵摽蚣艹霈F(xiàn)較早,感覺(jué)上會(huì)相對(duì)成熟,日后學(xué)習(xí)中遇到問(wèn)題想要查找答案相對(duì)簡(jiǎn)單一些,對(duì),就是這么簡(jiǎn)單。多說(shuō)無(wú)益,接下來(lái)開(kāi)始的學(xué)習(xí),我按照我學(xué)習(xí)中帶著的問(wèn)題來(lái)一一解答,完成我的入門(mén)筆記。主要是針對(duì)前端的組件化開(kāi)發(fā)。 這兩天得空,特意來(lái)折騰了以下時(shí)下火熱的前端框架react,至于為什么選react,作為一個(gè)初學(xué)者react和vue在技術(shù)上的優(yōu)劣我無(wú)權(quán)評(píng)論,也就不妄加評(píng)論了...

    leon 評(píng)論0 收藏0
  • ReactJs入門(mén)教程

    摘要:組件關(guān)注的只應(yīng)該是狀態(tài),不同的狀態(tài)呈現(xiàn)不同的表現(xiàn)形式。組件一切都是組件倡導(dǎo)開(kāi)發(fā)者將切分成一個(gè)個(gè)組件從而達(dá)到松耦合及重用的目的。只不過(guò)的命名是進(jìn)入狀態(tài)之前跟進(jìn)入狀態(tài)之后。 前端已不止于前端-ReactJs初體驗(yàn) 原文寫(xiě)于 2015-04-15 https://github.com/kuitos/kuitos.github.io/issues/21 要說(shuō)2015年前端屆最備受矚目的技術(shù)是啥...

    bingo 評(píng)論0 收藏0
  • React 入門(mén)實(shí)踐

    摘要:更多相關(guān)介紹請(qǐng)看這特點(diǎn)僅僅只是虛擬最大限度減少與的交互類(lèi)似于使用操作單向數(shù)據(jù)流很大程度減少了重復(fù)代碼的使用組件化可組合一個(gè)組件易于和其它組件一起使用,或者嵌套在另一個(gè)組件內(nèi)部。在使用后,就變得很容易維護(hù),而且數(shù)據(jù)流非常清晰,容易解決遇到的。 歡迎移步我的博客閱讀:《React 入門(mén)實(shí)踐》 在寫(xiě)這篇文章之前,我已經(jīng)接觸 React 有大半年了。在初步學(xué)習(xí) React 之后就正式應(yīng)用到項(xiàng)...

    shenhualong 評(píng)論0 收藏0
  • 適合React及前端開(kāi)發(fā)入門(mén)的小項(xiàng)目推薦

    摘要:最近剛進(jìn)入公司實(shí)習(xí),找工作的過(guò)程中發(fā)現(xiàn)還是基礎(chǔ)比較重要吧。分享一些關(guān)于前端開(kāi)發(fā)入門(mén)和入門(mén)的小項(xiàng)目小任務(wù)吧。百度前端技術(shù)學(xué)院的任務(wù)其實(shí)能把百度前端技術(shù)學(xué)院的任務(wù)做完就很不錯(cuò)啦,這里推薦幾個(gè)比較好的任務(wù)。可以學(xué)到前端工程化和入門(mén)的相關(guān)知識(shí)。 最近剛進(jìn)入公司實(shí)習(xí),找工作的過(guò)程中發(fā)現(xiàn)還是基礎(chǔ)比較重要吧。分享一些關(guān)于前端開(kāi)發(fā)入門(mén)和React入門(mén)的小項(xiàng)目(小任務(wù))吧。 百度前端技術(shù)學(xué)院的任務(wù) 其實(shí)...

    Vicky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<