Оператор Return приводит к: Ожидал присваивания или вызова функции, а вместо этого увидел выражение no-unused-expressions

#javascript #reactjs #function #return #innerhtml

#javascript #reactjs #функция #Возврат #innerhtml

Вопрос:

Иногда мне все еще трудно понять, когда или когда не использовать оператор return . Недавно я столкнулся с проблемой в моем коде ReactJS. По сути, я получаю html из вызова выборки, а затем устанавливаю его как innerHTML элемента. Мне нужно немного изменить эти данные после их установки.

Когда это не работает:

   useEffect(()=>{
    setHeaderFooter(props.data.header,props.data.footer, changeLinks)
  }, [props.data.header,props.data.footer])

  const changeLinks = ()=>{
    $(document).find('nav.navbar a[href*="/oc"]').each(function (index, element) {
      var original = $(element).attr('href');
      var final = process.env.REACT_APP_PLATFORM_URL   original;
      $(element).attr('href', final);
  });
  
  // Adds the first letter of the users name as the icon in header.
      $('#firstLetter').text()
      $('#firstLetterLink').text().charAt(0).toUpperCase()
  }

export const setHeaderFooter=(head,foot, callback) =>{
    let header = document.querySelector('#header')
    let footer = document.querySelector('#footer')
    header.innerHTML = head, footer.innerHTML = foot
   return callback()
}
 

Когда это работает (без этапа модификации в конце):

   useEffect(()=>{
    setHeaderFooter(props.data.header,props.data.footer)
  }, [props.data.header,props.data.footer])

  const changeLinks = ()=>{
    $(document).find('nav.navbar a[href*="/oc"]').each(function (index, element) {
      var original = $(element).attr('href');
      var final = process.env.REACT_APP_PLATFORM_URL   original;
      $(element).attr('href', final);
  });
  
  // Adds the first letter of the users name as the icon in header.
      $('#firstLetter').text()
      $('#firstLetterLink').text().charAt(0).toUpperCase()
  }

export const setHeaderFooter=(head,foot) =>{
    let header = document.querySelector('#header')
    let footer = document.querySelector('#footer')
    return header.innerHTML = head, footer.innerHTML = foot
}
 

Может кто-нибудь дать мне объяснение относительно того, что здесь происходит. Я хочу лучше понять оператор return.

Ответ №1:

Проблема заключается в запятой, используемой между header и footer присваиванием:

Измените это:

 header.innerHTML = head, footer.innerHTML = foot
return callback()
 

К этому:

 header.innerHTML = head;
footer.innerHTML = foot;
return callback();
 

Чтобы объяснить проблему, обратитесь к документам MDN:

Оператор запятой (,) вычисляет каждый из своих операндов (слева направо) и возвращает значение последнего операнда

В вашем случае footer.innerHTML = foot это последний операнд, и он будет возвращен, но поскольку вы ничему не присваиваете возвращаемое значение, оно пропадает впустую и, следовательно, вы получаете ошибку lint. Подробнее об ошибке lint можно прочитать в разделе Запретить неиспользуемые выражения (no-unused-expressions).