FullStackOpen Part2-a Rendering a collection, modules メモ

console.log

とにかくconsole.logを使うのがコツ
複数ならべるときは+ではなくカンマ区切りで

Protip: Visual Studio Code snippets

console.logは特にsnippetとして登録しておくとよい

JavaScript Arrays

Higher-order function
関数を値として扱うこと
配列処理のfilterrejectなどで便利
再利用できるし読みやすいので便利

const animals = [nameとspeciesのオブジェクトの配列]
const isDog = (animal) => animal.species === 'dog'
const dogs = animals.filter(isDog)
const other = animals.reject(isDog)

Map
同じく高階関数 以下のように使う
const names = animals.map((x)=>x.name)

reduce
累積計算をするのに向いている
配列.reduce((累積, 要素)=>累積+要素, 初期値)

Rendering Collections

map関数を使用して<li>要素を並べることもできる。
<li>中のコンテントに{}を付けるのを忘れない!
例: {notes.map(note => <li>{note.content}</li>)} 

const App = (props) => {
 const { notes} = props
 
 return (
  <div>
   <h1>Notes</h1>
   <ul>
    {notes.map(note => <li>{note.content}</li>)}
   </ul>
  </div>
 )
}

Key-Attribute

上記のようにCollectionを描画する場合、各要素がkey属性を持っている必要がある。これは各要素間で区別するため。
例: {notes.map(note => <li key={note.id}>{note.content}</li>)}

そうでない場合、以下の警告がでる
Warning: Each child in an array iterator should have  a unique key

Map

map関数は必ず配列から配列を作る

Anti-pattern: Array Indexes as Keys

li要素のkeyに配列のインデックスは渡してはいけない
ちなみに配列のインデックスはmap関数の第二引数にしていする

ダメな例:
<ul>
 {notes.map((note, index) => 
   <li key={index}>{note.content}</li>
 }
</ul>

Refactoring Modules

モジュールごとにファイル分けするのがES6では一般的
例えば:

Note.js:
const Note = ({note}) => {
 return (
  <li>{note.content}</li>
 )
}
export default Note

インポート側では
import Note from './components/Note'


この記事が気に入ったらサポートをしてみませんか?