国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Maison php教程 PHP開(kāi)發(fā) React非dom屬性介紹

React非dom屬性介紹

Nov 30, 2016 pm 04:56 PM
react

非dom屬性?
dangerouslySetInnerHTML,ref,key
非dom標(biāo)準(zhǔn)屬性,也就是說(shuō)dom標(biāo)準(zhǔn)里面沒(méi)有規(guī)定的屬性,react引入了三個(gè)非dom屬性,如上。

dangerouslySetInnerHTML:字面意思,危險(xiǎn)的設(shè)置內(nèi)部html,這個(gè)屬性的作用就是在jsx中,直接插入html代碼。我們?yōu)槭裁从眠@個(gè)屬性插入html代碼呢?而不是在編寫代碼的時(shí)候直接寫入呢?因?yàn)橛械臅r(shí)候我們?cè)诰帉懘a的時(shí)候,無(wú)法確實(shí)要插入什么代碼,也就是說(shuō)這部分html代碼是動(dòng)態(tài)生成的。或者說(shuō)不是由我們來(lái)編寫的,為什么這中行為是危險(xiǎn)的呢?有一個(gè)詞語(yǔ)叫做跨站攻擊,之所以會(huì)產(chǎn)生跨站攻擊,就是因?yàn)橛羞@樣的直接寫入代碼功能,我們舉個(gè)例子,如果頁(yè)面上要顯示一個(gè)內(nèi)容,這個(gè)內(nèi)容來(lái)自于用戶的輸入,假設(shè)用戶的輸入中包含了代碼,比如說(shuō)js代碼,html代碼,如果我們不經(jīng)過(guò)檢測(cè)就直接使用,把這個(gè)dom插入到頁(yè)面中,那么其他人訪問(wèn)頁(yè)面的時(shí)候,就會(huì)執(zhí)行這個(gè)人寫入的代碼,由于我們無(wú)法判斷這個(gè)用戶的意圖,所以他有可能寫入很危險(xiǎn)的代碼,比如說(shuō)添加一個(gè)連接,連接到一個(gè)木馬,那么訪問(wèn)這個(gè)頁(yè)面的用戶,就會(huì)在不知不覺(jué)中中病毒或者下載木馬,這是非常危險(xiǎn)的,但是有些時(shí)候我們確實(shí)需要?jiǎng)討B(tài)的寫入代碼,所以react還是提供了這個(gè)屬性,只是明確的在名字里面告訴你這個(gè)屬性是很危險(xiǎn)的,盡量不要去使用。

ref:reference的縮寫,父組件引用子組件,我們?cè)诰帉懡M件的時(shí)候,經(jīng)常會(huì)用到嵌套的情況,父組件如果嵌套了子組件,父組件引用子組件的時(shí)候,就需要用ref,在實(shí)際的使用中ref其實(shí)是在父組件中維護(hù)了很多引用,每一個(gè)引用都引用到了一個(gè)對(duì)應(yīng)的子組件,這樣我們?cè)诟附M件中就可以通過(guò)這些引用來(lái)操作子組件。為什么我們不能操作父組件的父組件呢?這個(gè)其實(shí)不是代碼問(wèn)題,而是設(shè)計(jì)問(wèn)題,在react中我們使用組件的目的就是使代碼模塊化,每個(gè)組件只需要考慮自己自身的功能,邏輯,不需要關(guān)心誰(shuí)在使用它,因此組件不需要引用他本身的父組件,父組件和組件之間的交互式通過(guò)屬性的傳遞來(lái)實(shí)現(xiàn)的,我們后面會(huì)說(shuō)。但是這樣的傳遞是單向的,也就是說(shuō),屬性總是由上往下傳遞,下面的組件不會(huì)對(duì)上面的組件進(jìn)行控制,這是為了讓邏輯更加清晰,

key:提高渲染性能。react特點(diǎn)之一就是性能好,這是因?yàn)樗コ耸謩?dòng)的dom操作,完全由自動(dòng)來(lái)實(shí)現(xiàn),但是自動(dòng)實(shí)現(xiàn)就說(shuō)明他有一套算法,也就說(shuō)在頁(yè)面發(fā)生變化的時(shí)候,react需要應(yīng)用這套算法來(lái)判斷如何高效的修改頁(yè)面,以反映出對(duì)應(yīng)的變化,這個(gè)算法通常被稱為diff,也就是different的縮寫,表示計(jì)算兩個(gè)狀態(tài)之間的差異。


react diff算法

weirui1590_1480483470530_59.png

?? react diff算法的流程圖
? ?首先需要明確我們現(xiàn)在進(jìn)行比較的是兩個(gè)組件,react中所有的東西都是組件,所以我們只要明白了兩個(gè)組件之間是如何比較的,其他的結(jié)構(gòu)都可以分解成組件進(jìn)行比較。
最左側(cè)是開(kāi)始,開(kāi)始以后第一個(gè)判斷就是節(jié)點(diǎn)是否相同,相同的意思就是div和div是相同的,div和p就是不同的,或者說(shuō)我們自定義的HelloMessage和HelloMessage是相同的,HellowMessage 和HelloWorld就不是相同的組件,節(jié)點(diǎn)如果相同才會(huì)進(jìn)行后面的比較,如果節(jié)點(diǎn)不同,react會(huì)直接拋棄舊的節(jié)點(diǎn),生成一個(gè)全新的節(jié)點(diǎn),在這里react是基于一個(gè)假設(shè),如果兩個(gè)節(jié)點(diǎn)不同,那么他們的內(nèi)容很大程度不同。如果節(jié)點(diǎn)不同我們就直接結(jié)束比較,生成全新的節(jié)點(diǎn),如果節(jié)點(diǎn)相同,下一步需要判斷的是,這個(gè)幾點(diǎn)是自定義的節(jié)點(diǎn)還是dom的標(biāo)準(zhǔn)節(jié)點(diǎn),也就是說(shuō),他是div還是HelloWorld,如果說(shuō)不是自定義的節(jié)點(diǎn),是標(biāo)準(zhǔn)的節(jié)點(diǎn),那么react下一步需要做的就是比較兩個(gè)節(jié)點(diǎn)的屬性,比如說(shuō)class,id等,如果屬性完全相同,就說(shuō)明兩個(gè)節(jié)點(diǎn)是相同的,結(jié)束比較;如果屬性不同,就把不同的屬性記下來(lái),并應(yīng)用改動(dòng),比如說(shuō)多了一個(gè)新屬性,就加入一個(gè)新屬性,少了一個(gè)屬性就刪掉一個(gè)屬性,類似這樣的操作。也就是react并不會(huì)刪掉舊的節(jié)點(diǎn),只會(huì)在他上面進(jìn)行操作。若果是自定義的節(jié)點(diǎn),react會(huì)重新渲染他,我們后面會(huì)學(xué)習(xí)屬性和狀態(tài),一個(gè)組件有很多狀態(tài),如果是同一個(gè)自定義組件,那么新組件可能只是舊組件的一個(gè)狀態(tài),所說(shuō)reac會(huì) 把新的狀態(tài)傳入到舊的組件中,然后比較組件的渲染結(jié)果,并進(jìn)行改動(dòng),也就是說(shuō)react仍然不會(huì)重新生成組件,而是在舊的組件上進(jìn)行改動(dòng),這就是diff算法的整個(gè)流程。那么key到底有什么用呢?key作用主要體現(xiàn)在節(jié)點(diǎn)的比較,假設(shè)我們有一個(gè)類似列表的節(jié)點(diǎn),也就是父節(jié)點(diǎn)里面有多個(gè)子節(jié)點(diǎn),那么如果沒(méi)有key的時(shí)候,我們進(jìn)行改動(dòng),react會(huì)比較傻的從左到右進(jìn)行比較,比如說(shuō)在改動(dòng)之前只有節(jié)點(diǎn)1,在改動(dòng)之后我們插入一個(gè)節(jié)點(diǎn)2,變成了節(jié)點(diǎn)2,節(jié)點(diǎn)1,那么react執(zhí)行的操作是,刪除節(jié)點(diǎn)1,添加節(jié)點(diǎn)2,添加節(jié)點(diǎn)1,也就是說(shuō),react無(wú)法判斷新?tīng)顟B(tài)中的節(jié)點(diǎn)1是不是就狀態(tài)中的節(jié)點(diǎn)1,所以他只能把不同的全部刪掉,即使他們可能相同,這樣就導(dǎo)致性能上的問(wèn)題,那么引入key的目的就是給每個(gè)節(jié)點(diǎn)加上唯一的標(biāo)識(shí),這樣的話react通過(guò)比較key,就可以知道到底哪些節(jié)點(diǎn)是原有節(jié)點(diǎn),哪些節(jié)點(diǎn)是新加入的節(jié)點(diǎn),針對(duì)我們剛才說(shuō)的例子, 節(jié)點(diǎn)1變成了節(jié)點(diǎn)2節(jié)點(diǎn)1,這時(shí)候,react只需要做一個(gè)操作,就是插入節(jié)點(diǎn)2,因?yàn)楣?jié)點(diǎn)1的key是一樣的,說(shuō)明他們兩個(gè)是同一個(gè)節(jié)點(diǎn),沒(méi)有變化。
? ? 了解這個(gè)原理,對(duì)于我們編寫react組件有什么啟示呢?
? ? 第一點(diǎn)就是如果兩個(gè)組件非常類似,那就盡量把他們寫成一個(gè)組件,因?yàn)槲覀冊(cè)诹鞒讨锌吹剑瑑蓚€(gè)不相同的組件一定會(huì)被重新生成,即使他們的內(nèi)容非常的相似,。第二個(gè)啟示就是如果使用類似的列表來(lái)展示元素的話,那么元素盡量加上key,這樣可以極大地提高效率,避免不必要的性能損耗。


如何使用非dom屬性?
dangerously的實(shí)例

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>hello world</title>
</head>
<body>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/react.js"></script>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/JSXTransformer.js"></script>
    <script type="text/jsx">
        var style={
           color:"red",
           border:"1px solid #f09",

        };
        var rawHTML={
           __html:"<h1>I am inner HTML</h1>"
        };
        var HelloWorld=React.createClass({
        render: function(){
           return <p>Hello,world</p>
        }
        });
        React.render(<div style={style} dangerouslySetInnerHTML={rawHTML}></div>,document.body);

    </script>
</body>
</html>

ref實(shí)例,要注意通過(guò)引用拿到的并不是這個(gè)dom節(jié)點(diǎn)本身,也就說(shuō)我們并不能進(jìn)行dom之間的操作,比如說(shuō)設(shè)置文本,這樣是不行的,我們拿到的只是一個(gè)虛擬的dom節(jié)點(diǎn),也就是react展示給我們的dom節(jié)點(diǎn),如果想要拿到真正的dom節(jié)點(diǎn),還需要調(diào)用一個(gè)方法,后面我們會(huì)說(shuō),不過(guò)react并不會(huì)鼓勵(lì)我們這樣去做,除非在特殊的情況下,我們需要操作dom節(jié)點(diǎn),其他情況react會(huì)幫助我我們進(jìn)行操作,

這個(gè)例子不全,后面我們會(huì)繼續(xù)講解。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>hello world</title>
</head>
<body>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/react.js"></script>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/JSXTransformer.js"></script>
    <script type="text/jsx">
        var style={
           color:"red",
           border:"1px solid #f09",

        };
        var rawHTML={
           __html:"<h1>I am inner HTML</h1>"
        };
        var HelloWorld=React.createClass({
        render: function(){
           this.refs.childp
           
           return <p ref="childp">Hello,world</p>
        }
        });
        React.render(<div style={style} dangerouslySetInnerHTML={rawHTML}></div>,document.body);

    </script>
</body>
</html>

key實(shí)例:注意在每個(gè)組件的內(nèi)部,key的值必須是不同的,注意是組件內(nèi)部!兩個(gè)組件之間就沒(méi)有這個(gè)限制了。
記住兩點(diǎn):1,內(nèi)容類似的組件盡量合并稱為同一個(gè)組件,2列表類型的元素,一定要加上唯一的key,做到這兩點(diǎn),就能避免很多性能問(wèn)題。

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>hello world</title>
</head>
<body>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/react.js"></script>
    <script type="text/javascript" src="http://cdn.bootcss.com/react/0.13.2/JSXTransformer.js"></script>
    <script type="text/jsx">
        var style={
           color:"red",
           border:"1px solid #f09",

        };
        var rawHTML={
           __html:"<h1>I am inner HTML</h1>"
        };
        var HelloWorld=React.createClass({
        render: function(){
            return 
            <ul>
                <li key="1">1</li>
                <li key="2">2</li>
                <li key="3">3</li>
            </ul>
        }
        });
        React.render(<div style={style} dangerouslySetInnerHTML={rawHTML}></div>,document.body);

    </script>
</body>
</html>


Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefa?on, veuillez contacter admin@php.cn

Outils d'IA chauds

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Tutoriel PHP
1502
276
React vs. Vue: Quel framework utilise Netflix? React vs. Vue: Quel framework utilise Netflix? Apr 14, 2025 am 12:19 AM

NetflixUSESACustomFrameworkCalled "gibbon" builtonReact, notreactorVueDirectly.1) teamExperience: ChoOsBasedOnFamiliarity.

L'écosystème de React: bibliothèques, outils et meilleures pratiques L'écosystème de React: bibliothèques, outils et meilleures pratiques Apr 18, 2025 am 12:23 AM

L'écosystème React comprend des bibliothèques de gestion d'état (telles que Redux), des bibliothèques de routage (telles que Reactrouter), des bibliothèques de composants d'interface utilisateur (telles que Material-UI), des outils de test (tels que la plaisanterie) et de la construction d'outils (tels que WebPack). Ces outils fonctionnent ensemble pour aider les développeurs à développer et à maintenir efficacement les applications, à améliorer la qualité du code et l'efficacité de développement.

Frontend de Netflix: Exemples et applications de React (ou Vue) Frontend de Netflix: Exemples et applications de React (ou Vue) Apr 16, 2025 am 12:08 AM

Netflix utilise React comme cadre frontal. 1) Le modèle de développement composant de React et un écosystème fort sont les principales raisons pour lesquelles Netflix l'a choisi. 2) Grace à la composante, Netflix divise les interfaces complexes en morceaux gérables tels que les lecteurs vidéo, les listes de recommandations et les commentaires des utilisateurs. 3) Le cycle de vie virtuel et composant virtuel de React optimise l'efficacité du rendu et la gestion de l'interaction des utilisateurs.

React: La puissance d'une bibliothèque JavaScript pour le développement Web React: La puissance d'une bibliothèque JavaScript pour le développement Web Apr 18, 2025 am 12:25 AM

React est une bibliothèque JavaScript développée par Meta pour la création d'interfaces utilisateur, avec son c?ur étant le développement des composants et la technologie DOM virtuelle. 1. Gestion des composants et de l'état: React gère l'état à travers les composants (fonctions ou classes) et les crochets (tels que UseState), améliorant la réutilisabilité et la maintenance du code. 2. Dom virtuel et optimisation des performances: via Virtual Dom, React met à jour efficacement le DOM réel pour améliorer les performances. 3. Cycle de vie et crochets: les crochets (tels que l'utilisation d'effet) permettent aux composants de la fonction de gérer les cycles de vie et d'effectuer des opérations à effet secondaire. 4. Exemple d'utilisation: des composants de Basic Helloworld à la gestion avancée de l'état mondial (UseContext et

L'avenir de React: Tendances et innovations dans le développement Web L'avenir de React: Tendances et innovations dans le développement Web Apr 19, 2025 am 12:22 AM

L'avenir de React se concentrera sur l'ultime dans le développement des composants, l'optimisation des performances et l'intégration profonde avec d'autres piles technologiques. 1) React simplifiera encore la création et la gestion des composants et promouvra l'ultime dans le développement des composants. 2) L'optimisation des performances deviendra le centre d'attention, en particulier dans les grandes applications. 3) React sera profondément intégré à des technologies telles que GraphQL et TypeScript pour améliorer l'expérience de développement.

Développement frontal avec React: Avantages et techniques Développement frontal avec React: Avantages et techniques Apr 17, 2025 am 12:25 AM

Les avantages de React sont sa flexibilité et son efficacité, qui se reflètent dans: 1) la conception basée sur les composants améliore la réutilisabilité du code; 2) La technologie DOM virtuelle optimise les performances, en particulier lors de la gestion de grandes quantités de mises à jour de données; 3) L'écosystème riche fournit un grand nombre de bibliothèques et d'outils tiers. En comprenant comment React fonctionne et utilise des exemples, vous pouvez ma?triser ses concepts principaux et les meilleures pratiques pour créer une interface utilisateur efficace et maintenable.

React, Vue et l'avenir du frontend de Netflix React, Vue et l'avenir du frontend de Netflix Apr 12, 2025 am 12:12 AM

Netflix utilise principalement React comme cadre frontal, complété par Vue pour des fonctions spécifiques. 1) La composante de React et le DOM virtuel améliorent l'efficacité des performances et du développement des applications Netflix. 2) Vue est utilisée dans les outils internes et les petits projets de Netflix, et sa flexibilité et sa facilité d'utilisation sont essentielles.

React vs frameworks backend: une comparaison React vs frameworks backend: une comparaison Apr 13, 2025 am 12:06 AM

React est un cadre frontal pour la construction d'interfaces utilisateur; Un framework back-end est utilisé pour créer des applications c?té serveur. React fournit des mises à jour d'interface utilisateur composentisées et efficaces, et le framework backend fournit une solution de service backend complète. Lors du choix d'une pile technologique, les exigences du projet, les compétences en équipe et l'évolutivité doivent être prises en compte.

See all articles