Как исправить 'React: ожидал присваивания или вызова функции и вместо этого видел выражение' (присвоение состояния)? - PullRequest
0 голосов
/ 14 июня 2019

У меня есть модуль новостей, который получает статьи по ссылке и распространяет их в состоянии:

import React, { Component } from 'react'
import axios from 'axios'
import { URL } from '../../../config'

class NewsList extends Component {

    state = {
        items: [],
        start: this.props.start,
        amount: this.props.amount,
        end: this.props.start + this.props.amount

    }

    componentWillMount() {
        axios.get( `${ URL }/articles?_start=${ this.state.start }&end=${ this.state.end }` )
        .then( res => {
            this.setState( prevState => {
                items: [ ...prevState.items, ...res.items ]  
            } )
        } )
    }
    render() {
        return<div>
                news
            </div>
    }
}

export default NewsList

ошибка в консоли:

Line 19:  Expected an assignment or function call and instead saw an expression  no-unused-expressions

так выглядит простая ошибка, и это не то же самое, что похожие вопросы с этой ошибкой.

Ответы [ 3 ]

2 голосов
/ 14 июня 2019

Добавьте в this.setState оператор return или удалите лишние фигурные скобки, и все будет хорошо.

.then( res => this.setState({items: [ ...this.state.items, ...res.items ]}))
2 голосов
/ 14 июня 2019

Проблема в том, что ваш setState звонок внутри axios.get звонка. Когда вы напрямую возвращаете объект в функции стрелки, вы должны заключить его в круглые скобки. Без круглых скобок он анализируется как тело функции.

Из документации для "Функции стрелок - возвращение литералов объектов" :

Имейте в виду, что возврат литералов объекта с использованием краткого синтаксиса тела params => {object:literal} не будет работать должным образом.

Это потому, что код внутри фигурных скобок ({}) анализируется как последовательность операторов.

Не забудьте заключить литерал объекта в скобки.

// This will not work.
const () => { item: "Test" };

// This will work
const () => ({ item: "Test" });
1 голос
/ 14 июня 2019

Ошибка происходит, потому что ваш вызов на setState требует обратного вызова, который возвращает значение.Ваш обратный вызов не возвращает значение.

Вы должны заменить

this.setState( prevState => {
  items: [ ...prevState.items, ...res.items ]  
} )

на

this.setState( prevState => ({
  items: [ ...prevState.items, ...res.items ]  
}) )

или на

this.setState( prevState => {
  return { items: [ ...prevState.items, ...res.items ]  }
} )
...