blog

リアクトの手動実装(シリーズI)

1.あなたがindex.jsでReactを導入することができ、この時間をReactを達成するために、どのように、非常に単純ではありません2.React-DOMを達成するためにここにreact1.0バー...

Aug 19, 2020 · 2 min. read
シェア

リアクト

- まず第一に、webpackまたは小包を使用する(ドキュメントを使用する): [https://..org/getting_.html]() )環境を構築する
- 新しいReactの下のsrcディレクトリ内のこの時間.jsファイルを手動で作成する
 let React = {}
 React.createElement = (type,attrs,...children) => {
 if(!type) {
 return
 }
 return {
 type,
 attrs,
 children
 }
 }
 export default React
 上記のコードでは、typeはタグの種類を指し、attrsは値を指し、childrenは子レベルである。
  
 <div id="app">
 <span>hello react</span>
 </div>

今回、index.jsにReactを導入することができますが、その方法は非常に簡単ではありません!

React-DOMの実装

次に、第二段階は、仮想ドムレンダリングの実装であり、また、新しいreact-domの下のsrcディレクトリにある.js 
function ReactDOM(vnode, contanier) {
 let element;
 const { type, attrs, children } = vnode;
 
 //1.DOMがテキストノードであるかどうかを判断するために、はい、次にテキストノードを作成し、そうでない場合は、DOMノードの作成
 
 if (typeof vnode === "string") {
 element = document.createTextNode(vnode);
 } else {
 element = document.createElement(type);
 }
 //2.DOMにattrsを差し込む
 
 setAttribute(element, attrs);
 
 //3.ページに表示する
 contanier.appendChild(element);
 
 //ここでは、子レベルがあるかどうかを判断することであり、再帰的に要素に一つずつレンダリングする必要がある
 if (children && children.length) {
 children.forEach((node) => {
 ReactDOM(node, element);
 });
 }
}
//setAttributeメソッドを実装する
 1.値があるかどうか、判断の次のステップがあり、そうでない場合は返す
 2.値は3つのカテゴリに分かれており、1つは、通常のid、classNameなどであり、別のスタイルである
 
function setAttribute(element, attrs) {
 if (!element || !attrs) {
 return;
 }
 Object.keys(attrs).forEach((attr) => {
 const value = attrs[attr];
 
 if (attr === "className") {
 element.setAttribute("class", value);
 } else if (attr === "style") {
 if (typeof value === "string") {
 element.style.cssText = value;
 } else if (isObject(value)) {
 let str = "";
 Object.keys(value).forEach((ele) => {
 str += ele + ":" + value[ele] + ";";
 element.style.cssText = str;
 });
 }
 } else {
 element.setAttribute(attr, value);
 }
 });
}
//オブジェクトかどうかを判断する
function isObject(obj) {
 return Object.prototype.toString.call(obj) === "[object Object]";
}
export default ReactDOM;

ここでは、reactのバージョン1.0の基本的な実装について、index.jsで使用しています!

import React from './src/react'
import ReactDOM from './src/react_-dom'
ReactDOM(
 <div id="app" className="app-class">
 oioioio
 <div
 id="span"
 className="span-class"
 style={{ color: "#f00", width: "100px" }}
 >
 span
 </div>
 </div>,
 document.getElementById("root")
);
Read next

CSSの世界』からのメモ

グラフィカルな情報表示に役立ちます。 定義:ある特定のブラウザが、他のブラウザとは異なるスタイルで表示される場合。 理由:W3C仕様には特定のシナリオに対する制約がないため。 要素はブロックレベルとインラインに分けられます。 真ん中のミソジニーなのはinline-block。 理解:box-sizing: content-box.は理由付けできる...

Aug 18, 2020 · 3 min read