Open2

Reactのトランスパイルを試してみていたメモ

koukou

<Component {...obj} />とすると、objが展開されてComponentに渡されることを示した例。Babelでトランスパイル。

よく<Component {...props} />とかで見るやつ。

// JSX
const Render = () => {
  const size = { width: 5, height: 10 }
  return <Rectangle {...size} hoge="hogehoge" />
}

// トランスパイル後
const Render = () => {
  const size = {
    width: 5,
    height: 10
  };
  return _jsx(Rectangle, {
    // ここのオブジェクト(=props)にスプレッド展開されたままの形で入る
    ...size,
    hoge: "hogehoge"
  });
};

https://babeljs.io/repl#?browsers=defaults%2C not ie 11%2C not ie_mob 11&build=&builtIns=false&corejs=3.21&spec=false&loose=false&code_lz=PTAEB4BMEsDcD4ASBTANqg9qA7hgTqpAITjAwIBQFIEARgK4AujGAdqGwMKrQDGA1gF4A3gAoAlKEHxQvNgGcMqZADpMAc1EByFOgxbxAX3gAhAKoAVCwHkAcqQbM28KnNbzGoTtbMAlAMoAov5SoADaFKCgwqDQkABcoACMADSgrACGALbIiVpy9HjyyMlaoIYpkdGxCaAATGmZOXkFRSV1ZRVVMXGJAMyN2bmg-RiFxaB9nZUAuq4KniZMLOyCoBJSMsJVeMiMhezgjiscrNx8QsJcPALG5lZ2DsvOFIbz7p4AMtAeoRvS0R2ewO6yqUXA9FQ8AAOmCotFvH4gv4VFkMgAHUSiVrFSQA7bwwkQHjwcBLJzsa68aCXbFjNp4mRuRTKNQYTQ41RNZBGUDAUnAElwqKGIxw0iQlxRcSvd6_XzIViQZB4P6MwFRZmeeTQABeJTWMWwcUYAAtEgBWNKm5DQdSmxiJJIABnKQP2eEOCt4jAyrHUymiKmDOv1hlApvZyEEACJI-pkPHkDG-S43hQtaBvb7_YG1qIjSbTdbbfbGNao-V1QTQLsPYd0fBAO6pgE7TQBG-oAkhkA88aAbldAOoMgD8GQCaDKRG68gA&debug=false&forceAllTransforms=false&modules=false&shippedProposals=false&circleciRepo=&evaluate=false&fileSize=false&timeTravel=false&sourceType=module&lineWrap=true&presets=env%2Creact%2Cstage-2&prettier=false&targets=&version=7.21.4&externalPlugins=&assumptions={}

koukou

ついでにuhyoさんの記事が学びになった。

https://zenn.dev/uhyo/articles/react17-new-jsx-transform#typescriptの設定

よくtsconfigの設定で、

{
  "compilerOptions": {
    // ...
    "jsx": "react-jsx",
    // ...
  }
}

とか見るのは、TypeScriptのコンパイラでReactの新変換方式(ex. _jsx)を指定しているものだったのか。


uhyoさんの記事参照

Nextはデフォルトで"jsx": "preserve"になっている気がするけれど、あれはSWCコンパイラにコンパイルを移譲しているからTSCでは何も行なわない"preserve"設定になっているのかな。