Реагируйте Собственная разница между вложенной функцией стрелки и нормальной функцией стрелки - PullRequest
0 голосов
/ 21 января 2020
let arr;
for (var i = 0; i < 4; i++) {
  arr.push(
    <ListItem key={i}> // native-base component
      <Button
        onPress={this.pick(curJob, i)}>
      </Button>
    </ListItem>
  )
}


render(){
  return (
    { arr }
  )
}

В этом коде, в чем разница между двумя функциями?

Функция 1.

pick = (job,index) => {
  console.log(job);
  console.log(index);
}

Функция 2.

pick = (job,index) => () => {
  console.log(job);
  console.log(index);
}

I обнаружил, что функция 2 работает нормально, но функция 1 возвращает ошибку (превышен максимальный размер стека вызовов)

Ответы [ 2 ]

0 голосов
/ 21 января 2020
 pick = (job,index) => () => {
                console.log(job);
                console.log(index);
           }

это просто функция, возвращающая функцию, равную

nestedfunc(job, index) => {
  console.log(job);
  console.log(index);
}


pick = (job,index) => nestedfunc(job,index);
0 голосов
/ 21 января 2020

Второй недействителен.

Прототип функции со стрелкой следующий:

variableName = (arguments) => {
    Body
}

Ваш onPress должен быть: onPress = {() => this.pick(curJob,i)}>, в противном случае функция вызывается каждый раз, когда происходит рендеринг, поэтому всегда С () => ранее вы говорите программе запускать this.pick только при нажатии

...