Давайте рассмотрим это шаг за шагом.
const moves = history.map()
Что мы здесь знаем? Мы знаем, что мы определяем константу с именем moves
для хранения повторяемых возвращаемых значений массива с именем history
. Как мы узнаем, что history
- это массив? Поскольку .map
является JS функцией-прототипом / сокращением для for (let i = 0; i < history.length; i +=1) ...
Далее, мы создаем анонимную функцию прямо внутри вызываемой функции .map()
, например:
const moves = history.map((step, move) => ...
Что такое step
и что move
? Это чаще всего называется value
и index
. И наименование не имеет значения, это имя параметра функции, и мы можем его называть, но оно нам понятно.
Давайте напишем это так:
const moves = history.map((value, index) => ...
Может, это заставит еще немного смысла? value
- это колодец, значение элемента массива, а индекс - это его позиция.
.map()
- это сокращенный прототип для предоставления нам быстрой итерации по значениям и его отображенному индексу.
так, скажем, history = ['/login', '/logout', '/home]
history.map((value, index) => console.log(value, index))
даст нам '/login', 0
/logout, 1
, /home 2
Мы также можем полностью опустить параметр step / index
, это необязательно (как и параметр value
, но вы в основном хотите с ним работать.)
Что он теперь делает return
? Он возвращает элемент HTML / JSX (в случае React), используя значения, сгенерированные из массива.
Мы также могли бы написать его так (возможно, более похожий на простой Vanilla JS вызовет некоторые C# сходства):
const moves = []
for (let i = 0; i < history.length; i += 1) {
const step = history[i]
const move = i
const desc = move ? `Go to move #${move}` : 'Go to game start'
moves.push(
<li>
<button onClick={() => this.jumpTo(move)}>{desc}</button>
</li>
)
}
return <ol>{moves}</ol>
Результат:
<ol>
<li>
<button onClick={() => this.jumpTo(0)}>Go to move #0</button>
</li>
<li>
<button onClick={() => this.jumpTo(1)}>Go to move #1</button>
</li>
<li>
<button onClick={() => this.jumpTo(2)}>Go to move #2</button>
</li>
</ol>