Cannot read property 'createElement' of undefined
TypeScript 環境で置きている場合、tsconfig.jsonのesModuleInteropが未設定または、false設定の時に、
import React from 'react';
のように読み込んでると起こります。esModuleInteropがオフの場合以下のように読み込むのが正解です。
import * as React from 'react';
React は UMD で定義されていてその中身は、
module.exports = {
createElement: /* ... */,
/* ... */,
}
のようだと定義されてます。これでesModuleInteropをオンにすると、この中身がすべてdefaultからも強制的にエクスポートされるようになります。
module.exports = {
default: {
createElement: /* ... */,
/* ... */,
},
createElement: /* ... */,
/* ... */,
}
import <name> from <module>の<name>はdefaultを見てるので、esModuleInteropがオフの場合はこれが無くエラーとなるのだと思います。