JavaScriptで作ったTodoアプリを、Reactで動かしてみることにする。
何はともあれReactの文法がよくわからないので、調べたことをまとめていく。
importとexport
意外と戸惑ってしまったのがimport。
概念は理解できるが、書き方がちょっと混乱する。
named export ※普通(defaultじゃない方)のexport
export const TodoItem1 = () => { return ( <h1>Hello Cats!</h1> ); }; export function TodoItem2() { return ( <h1>Hello Cats!</h1> ); }; export const TodoItem3 = function () { return ( <h1>Hello Cats!</h1> ); };
import { TodoItem1 } from './TodoItem'; import { TodoItem2 } from './TodoItem'; import { TodoItem3 } from './TodoItem';
// こうやってまとめて書いてもいい import { TodoItem1, TodoItem2, TodoItem3 } from './TodoItem';
importするときに {} を付ける。
1つのファイルに複数のコンポーネントを定義できる。
default export
const TodoItem3 = () => { return ( <h1>Hello Cats!</h1> ); }; export default TodoItem3;
export default function TodoItem4() { return ( <h1>Hello Cats!</h1> ); };
function TodoItem5() { return ( <h1>Hello Cats!</h1> ); }; export default TodoItem5;
const TodoItem6 = function () { return ( <h1>Hello Cats!</h1> ); }; export default TodoItem6;
import TodoItem3 from './TodoItem3'; import TodoItem4 from './TodoItem4'; import TodoItem5 from './TodoItem5'; import TodoItem6 from './TodoItem6';
importするときに {} は不要。
1つのファイルに1つのdefault exportを定義できる。
default exportはファイルがインポートされるときに、default exportしたものの値がインポートされるらしく、それ故に、インポート時にexportしたものの名前を違うモノにしても問題ないらしい。
const TodoItem3 = () => { return ( <h1>Hello Cats!</h1> ); }; export default TodoItem3;
// 別の名前でインポートして、使用しても問題ない import TodoItem from './TodoItem3';
1ファイル1コンポーネントを強制したいなら、default exportを使えばいい気がするけど、名前を変えるのは紛らわしいので、却ってわかりにくくなってしまいそう。
いずれにせよ、どっちにするのかは、あらかじめ決めておいた方がよさそうだ。
ところで、default exportの例文を書いていて気付いたのだが、export default functionはOKだが、export default const だとエラーになる。(何やらES6では許容していない書き方らしいぞ。)
// エラーになる例 export default const TodoItem3 = () => { return ( <h1>Hello Cats!</h1> ); };
// これはOK export default function TodoItem4() { return ( <h1>Hello Cats!</h1> ); };
// エラーになる例 export default const TodoItem6 = function () { return ( <h1>Hello Cats!</h1> ); };