class Game extends Component
{
constructor()
{
super()
this.state = {
speed: 0
}
//firebaseInit()
}
render()
{
return
(
<div>
<h1>The Score is {this.state.speed};</h1>
</div>
)
}
}
export default Game;
Я новичок в React, и для этого кода он дает эту ошибку
Expected an assignment or function call and instead saw an expression no-unused-expressions
Не понимаю, где ошибаюсь, пожалуйста, помогите
@ zcui93 показывает ошибку в этом файле и в строке возврата, не могли бы вы помочь
Какая линия? пожалуйста, предоставьте подробности
@ Think-Twice он показывает в строке 18, которая является строкой, которая возвращает
правильно разместить вопрос с кодом.
@ThakurKarthik, что еще я должен указать, я предоставил код, ошибку и строку с ошибкой?
проблема возврата .. вы можете забыть один





Это происходит из-за того, что вы поместили скобку return в следующую строку. Это может быть распространенной ошибкой, если вы пишете js без точек с запятой и используете стиль, в котором открывающиеся фигурные скобки помещаются в следующую строку.
Интерпретатор считает, что вы вернули undefined, и не проверяет вашу следующую строку. Это операторская штука return.
Разместите открытую скобу на одной линии с return.
Синтаксический анализатор JavaScript автоматически добавит точку с запятой, когда во время синтаксического анализа исходного кода он обнаружит следующие конкретные ситуации: 1. когда следующая строка начинается с кода, который прерывает текущую (код может появляться на нескольких строках). 2. когда следующая строка начинается с символа}, закрытие текущего блока 3. когда достигается конец файла исходного кода 4. когда есть оператор return в его собственной строке 5. когда есть оператор break сам по себе строка 6. когда есть оператор throw в отдельной строке 7. когда есть оператор continue в своей собственной строке.
В моем случае я никогда не помещал возвращение в стрелочную функцию так что мой код следует
`<ProductConsumer>
{(myvariable)=>{
return <h1>{myvariable}</h1>
}}
</ProductConsumer> `
Но когда я возвращаю стрелку, она работает нормально. Как?
Если мы поместим фигурные скобки в стрелочную функцию, нам всегда нужно будет возвращаться.
да, это функция, поэтому она должна возвращать какое-то значение
В моем случае у меня были фигурные скобки вместо скобок.
const Button = () => {
<button>Hello world</button>
}
Где это должно было быть:
const Button = () => (
<button>Hello world</button>
)
Причина этого, как объяснено в MDN Docs, заключается в том, что функция стрелки, заключенная в (), будет возвращать значение, которое она обертывает, поэтому, если я хотел использовать фигурные скобки, мне пришлось добавить ключевое слово return, например:
const Button = () => {
return <button>Hello world</button>
}
Это было проблемой для меня
Спустя целый год после того, как я начал изучать веб-разработку, я ни разу не осознал, что стрелочные функции иногда нуждаются в return ... Мне нужно просмотреть свой старый код и, возможно, я пойму, почему некоторые вещи не работают. Особенно в реакции .. Спасибо, что предоставили этот ответ!
Это решение сработало, и теперь я понимаю, почему он давал мне ошибку.
import React from 'react';
class Counter extends React.Component{
state = {
count: 0,
};
formatCount() {
const {count} = this.state;
// use a return statement here, it is a importent,
return count === 0 ? 'Zero' : count;
}
render() {
return(
<React.Fragment>
<span>{this.formatCount()}</span>
<button type = "button" className = "btn btn-primary">Increment</button>
</React.Fragment>
);
}
}
export default Counter;
Хотя этот фрагмент кода может решить вопрос, включая объяснение действительно помогает улучшить качество вашего сообщения. Помните, что вы отвечаете на вопрос для читателей в будущем, и эти люди могут не знать причины вашего предложения кода.
Для меня ошибка возникла при использовании карты. И я не использовал оператор return внутри карты.
{cart.map((cart_products,index) => {
<span>{cart_products.id}</span>;
})};
Выше кода возникла ошибка.
{cart.map((cart_products,index) => {
return (<span>{cart_products.id}</span>);
})};
Простое добавление return решило эту проблему.
То же самое случилось со мной, это сработало только после добавления возврата. Но это зашито!
это потому, что карта принимает функцию. (cart_products, index) => {return (<span> {cart_products.id} </span>); } на самом деле является объявлением функции. Итак, когда мы вернемся, будет использовано возвращаемое значение.
Но что заставило меня задуматься, так это то, что код туто рабочего плавника без возврата !!!
Может быть, в учебнике. Код был заключен в квадратную скобку (). Если вы заключите его в (), он не будет нуждаться в возврате.
В моем случае ошибка произошла из-за новой строки после оператора return.
Ошибка: ожидалось присвоение или вызов функции, а вместо этого было обнаружено выражение
return
(
<ul>
{
props.numbers.map(number => <li key = {number.toString()}>number</li>)
}
</ul>
);
Работает нормально. Нет ошибки
return (
<ul>
{
props.numbers.map(number => <li key = {number.toString()}>number</li>)
}
</ul>
);
Вместо того
return
(
<div>
<h1>The Score is {this.state.speed};</h1>
</div>
)
Используйте код ниже
return(
<div>
<h1>The Score is {this.state.speed};</h1>
</div>
)
Обычно используйте скобку "(" в той же строке возврата, что и "возвращение(". Это решит эту проблему. Спасибо.
Если вы используете JSX внутри функции с фигурными скобками, вам необходимо преобразовать его в круглые скобки.
Неверный код
return this.props.todos.map((todo) => {
<h3> {todo.author} </h3>;
});
Правильный код
//Change Curly Brace To Paranthesis change {} to => ()
return this.props.todos.map((todo) => (
<h3> {todo.author} </h3>;
));
Это хорошая практика, если мы передадим второй параметр, то есть индекс для функции карты.
В моем случае я получил эту ошибку, потому что использовал вызов внутри условия без точки с запятой:
private async _setActive(active: boolean) {
if (this.isActive === active) {
return;
}
this.isActive = active;
this.isActive ? this._start() : this._stop();
}
Я его поменял, и ошибка исчезла:
private async _setActive(active: boolean) {
if (this.isActive === active) {
return;
}
this.isActive = active;
if (this.isActive) {
await this._start();
} else {
this._stop();
}
}
В моем случае я получил ошибку в строке setState:
increment(){
this.setState(state => {
count: state.count + 1
});
}
Поменял на это, теперь работает
increment(){
this.setState(state => {
const count = state.count + 1
return {
count
};
});
}
Я столкнулся с той же ошибкой с приведенным ниже кодом.
return this.state.employees.map((employee) => {
<option value = {employee.id}>
{employee.name}
</option>
});
Вышеупомянутая проблема была решена, когда я заменил фигурные скобки круглыми скобками, как указано в измененном фрагменте кода ниже.
return this.state.employees.map((employee) => (
<option value = {employee.id}>
{employee.name}
</option>
));
В моем случае это произошло из-за фигурных скобок функции, если вы используете jsx, вам нужно изменить фигурные скобки на круглые скобки, см. Код ниже
const [страны] = useState (["США", "Великобритания", "BD"])
I tried this but not work, don't know why
{countries.map((country) => {
<MenuItem value = {country}>{country}</MenuItem>
})}
But when I change Curly Braces to parentheses and Its working fine for me
{countries.map((country) => ( //Changes is here instead of {
<MenuItem value = {country}>{country}</MenuItem>
))} //and here instead of }
Надеюсь, это поможет и вам ...
Ошибка - «Ожидал присвоения или вызова функции, а вместо этого увидел выражение no-unused-expressions» возникает, когда мы используем фигурные скобки, т.е. {}, чтобы вернуть буквальное выражение объекта. В таком случае мы можем исправить это двумя способами.
Пример :
const items = ["Test1", "Test2", "Test3", "Test4"];
console.info(articles.map(item => { `this is ${item}` })); // wrong
console.info(items.map(item => (`this is ${item}`))); // Option1
console.info(items.map(item => { return `this is ${item}` })); // Option2
На случай, если у кого-то возникнет такая же проблема, как у меня. Я использовал круглые скобки с оператором return в той же строке, в которой я написал остальную часть кода. Кроме того, я использовал функцию карты и реквизиты, поэтому у меня было так много скобок. В этом случае, если вы новичок в React, вы можете избегать скобок вокруг реквизита, потому что теперь все предпочитают использовать функции стрелок. И в функции карты вы также можете избежать скобок вокруг обратного вызова функции.
props.sample.map(function callback => (
));
вот так. В приведенном выше примере кода вы можете видеть, что слева от обратного вызова функции есть только открывающая скобка.
В моем случае я использовал в конструкторе запятые вместо точки с запятой.
Пример с ошибками:
class foo(bar1, bar2, bar3){
this.bar1=bar1,
this.bar2=bar2,
this.bar3=bar3,
}
вместо этого я должен был использовать точки с запятой, как показано ниже:
class foo(bar1, bar2, bar3){
this.bar1=bar1;
this.bar2=bar2;
this.bar3=bar3;
}
Это непростой вопрос. Когда вы используете ключевое слово return, просто убедитесь, что НАЧАЛО скобки НАХОДИТСЯ НА ОДНОЙ СТРОКЕ, что и ключевое слово return. Если вы это сделаете, все должно работать нормально. Если вы этого не сделаете, вы получите указанную выше ошибку.
Я добавил диаграмму, чтобы (надеюсь) сделать ее максимально понятной для всех и избавить некоторых из вас от необходимости покупать себе новый монитор. Надеюсь, это предельно ясно, и если не напишу комментарий, я постараюсь его отредактировать.
Просто хочу добавить свое решение на случай, если кто-то еще столкнется с этой ошибкой. В моем случае это не имело ничего общего с скобками, стрелочной функцией или отсутствующим оператором возврата. У меня был такой чек
if (this.myProperty) {
this.myProperty == null
}
Мне пришлось удалить это, после чего ошибка исчезла. Разобраться в этом было сложно, потому что сообщение об ошибке не было описательным.
Сообщение об ошибке обычно появляется там, где он жалуется, например. какой файл, какая строка.