2016-10-19 4 views
0

Я использую ReactJS, и у меня возникают проблемы с функцией стрелки для возврата нескольких функций.Одна строка Функция стрелки, возвращает несколько

У меня есть функция в одну линию со стрелкой на событие OnLoad:

<iframe onLoad={() => (this.handleFrame && this.setState({loadingComplete: true}))}></iframe> 

Приведенный выше код не работает. Как я могу вернуть как this.handleFrame & this.setState({loadingComplete: true}) на одной строке кода?

+0

Вы хотите вернуть логические и их результаты или два фактических значения результата? –

ответ

1

Вы забыли назвать this.handleFrame:

<iframe onLoad={() => (this.handleFrame() && this.setState({loadingComplete: true}))}></iframe> 

Обратите внимание, что это будет вызывать обе функции, но он возвращает логическое значение (истина, если обе функции возвращают truthy результат, в противном случае нет)

Также обратите внимание, что если ваша первая функция не возвращает правду, следующая функция не будет вызываться!

Если вы хотите вызвать все функции, независимо от того, если они вернутся truthy, и не заботиться о возвращении результата, то сделать:

<iframe onLoad={() => { this.handleFrame(); this.setState({loadingComplete: true}) }}></iframe> 
+0

Вопрос о одной линии функции. Одиночные функции не должны иметь '{}' –

+1

Спасибо, много Доминика. Забыв позвонить this.handleFrame была моей главной проблемой. Однако ваш ответ дал мне больше понимания функций стрелок, поэтому я ценю предоставленную вами информацию. – londonfed

3

Вы можете попробовать это

<iframe onLoad={() => ({val1: this.handleFrame(), val2: this.setState({loadingComplete: true})})}></iframe> 

Он будет вернуть объект с двумя значениями.

1

Ваш вопрос неправильный. Вы не можетreturn два предмета сразу.

Ваш код проверяет наличие this.handleFrame, если это доступно, будет выполнено this.setState({loadingComplete: true}) и значение будет возвращеноrd. Если this.handleFrame недоступен, он вернется undefined.

Если вы хотите, чтобы выполнить несколько функций, вы можете сделать следующее.

<iframe onLoad={() => ((this.handleFrame() || true) && this.setState({loadingComplete: true}))}></iframe> 

Если вы вернетесь true для this.handleFrame(), вам не нужен || чек.

Если вы хотите вернуть несколько функций, вы можете сделать следующее.

<iframe onLoad={() => {handleFrame: this.handleFrame, state: this.setState({loadingComplete: true})}}></iframe> 
Смежные вопросы