正文从这开始~

总览

当我们忘记从函数中返回值时,会产生"Expected an assignment or function call and instead saw an expression"错误。为了解决该错误,确保显式地使用return语句或使用箭头函数隐式返回。

下面有两个示例来展示错误是如何产生的。

// App.js

const App = props => {
const result = ['a', 'b', 'c'].map(el => {
// ️ Expected an assignment or function call and instead saw an expression. eslint no-unused-expressions
el + '100';
}); return <div>hello world</div>;
}; const mapStateToProps = (state) => {
// ️ Expected an assignment or function call and instead saw an expression. eslint no-unused-expressions
todos: ['walk the dog', 'buy groceries']
} export default App;

App组件中,错误是在Array.map()方法中引起的。这里的问题在于,我们没有从传递给map()方法的回调函数中返回任意值。

在JavaScript函数中,如果我们没有显式地使用return语句,或者使用箭头函数隐式地返回一个值,则返回undefined

mapStateToProps函数中的问题是一样的,我们忘记从函数中返回值。

显式返回

为了解决该错误,我们必须显式地使用return语句或使用箭头函数隐式返回值。

下面是一个例子,用来说明如何使用显式return来解决这个错误。

const App = props => {
const result = ['a', 'b', 'c'].map(el => {
return el + '100'; // ️ using explicit return
}); console.log(result); return <div>hello world</div>;
}; const mapStateToProps = state => {
return {todos: ['walk the dog', 'buy groceries']}; // ️ using explicit return
}; export default App;

我们通过在map()方法中显式返回来解决问题。这是必须的,因为Array.map方法返回一个数组,其中包含我们传递给它的回调函数所返回的所有值。

需要注意的是,当你从一个嵌套函数中返回时,你并没有同时从外层函数中返回。

隐式返回

另一种方法是使用箭头函数的隐式返回。

// ️ implicit return
const App = props => (
<div>
<h2>hello</h2>
<h2>world</h2>
{['a', 'b', 'c'].map(element => (
<div key={element}>{element}</div>
))}
</div>
); // ️ implicit return
const result = ['a', 'b', 'c'].map(element => element + '100');
console.log(result); // ️ ['a100', 'b100', 'c100'] // ️ implicit return
const mapStateToProps = state => ({
todos: ['walk the dog', 'buy groceries'],
}); export default App;

我们为App组件使用了隐式地箭头函数返回。

需要注意的是,我们根本没有使用大括号。简短的隐式返回使用圆括号。

返回对象

如果我们使用隐式返回来返回一个对象,我们必须用圆括号来包裹这个对象。

//  RIGHT
const mapStateToProps = state => ({
todos: ['walk the dog', 'buy groceries'],
}); // ️ WRONG
const msp = state => {
// ️ Expected an assignment or function call and instead saw an expression.eslint no-unused-expressions
todos: ['walk the dog', 'buy groceries']
};

一个简单的思考方式是--当你使用大括号而没有用圆括号包裹它们时,你是在声明一个代码块(比如if语句)。

{
console.log('this is my block of code');
}

当不使用圆括号时,你有一个代码块,而不是一个对象。

但当你用圆括号包裹住大括号时,你就有一个隐式的箭头函数返回。

如果你认为eslint规则不应该在你的方案中造成错误,你可以通过使用注释来关闭某一行的eslint规则。

// eslint-disable-next-line no-unused-expressions

注释应该放在造成错误的那一行的正上方。

React报错之Expected an assignment or function call and instead saw an expression的更多相关文章

  1. React报错之Expected `onClick` listener to be a function

    正文从这开始~ 总览 当我们为元素的onClick属性传递一个值,但是该值却不是函数时,会产生"Expected onClick listener to be a function" ...

  2. react报错this.setState is not a function

    当报错这个的时候就要看函数是否在行内绑定this,或者在constructor中绑定this. 我这里犯的错误的是虽然我在constructor中绑定了this,但是语法写的不正确. 错误示范: co ...

  3. React报错之map() is not a function

    正文从这开始~ 总览 当我们对一个不是数组的值调用map()方法时,就会产生"TypeError: map is not a function"错误.为了解决该错误,请将你调用ma ...

  4. 读取导入csv csv报错iterable expected, not float

    示例代码import pandas as pdimport reimport csv data = pd.read_csv('nuojia.csv', encoding='utf-8')# print ...

  5. react 报错的堆栈处理

    react报错 Warning: You cannot PUSH the same path using hash history 在Link上使用replace 原文地址https://reactt ...

  6. selenium调用Firefox和Chrome需要注意的一些问题,和出现的报错selenium:expected [object undefined] undefined to be a string

    在高版本selenium下如:selenium3.4.3 1.高版本的selenium需要浏览器安装一些补丁驱动 Firefox:geckodriver 下载网址:http://download.cs ...

  7. 前端控制台 JavaScript函数报错 SyntaxError: expected expression, got ';' SyntaxError: expected expression, got 'if'

    在火狐浏览器下调试时, 页面报错SyntaxError: expected expression, got ';'或者SyntaxError: expected expression, got 'if ...

  8. JavaScript函数报错SyntaxError: expected expression, got ';'

    故事背景:编写Javaweb项目,在火狐浏览器下运行时firebug报错SyntaxError: expected expression, got ';'或者SyntaxError: expected ...

  9. myeclipse 10 载入新的项目报错Cannot return from outside a function or method

    myeclipse 10 载入新的项目报错Cannot return from outside a function or method 解决方法: 方法一: window -->prefere ...

随机推荐

  1. Spring bean到底是如何创建的?(上)

    前言 众所周知,spring对于java程序员来说是一个及其重要的后端框架,几乎所有的公司都会使用的框架,而且深受广大面试官的青睐.所以本文就以常见的一个面试题"spring bean的生命 ...

  2. 区分 python 爬虫或者是写自动化脚本时遇到的 content与text的作用

    通常在使用过程中或许我们能够轻而易举的会使用requsts模块中的content 与 text ,从print结果来看根本看不出任何区别: 总结精髓,text 返回的是unicode 型的数据,一般是 ...

  3. 记录bug的贴子

    这个贴子用来记录一些,平时关注新闻,暴露出来的bug,引以为戒. 2019/01/21 - 拼多多出现大量100元无门槛券 关键词: 风险控制:羊毛党: https://www.zhihu.com/q ...

  4. Vue回炉重造之三次封装axios

    源码目录 在src目录下建立一个request文件夹.里面建立两个文件: http.js api.js 源码内容 http.js import axios from 'axios' // 引入axio ...

  5. 记一次beego通过go get命令后找不到bee.exe的坑

    学习goweb开发,gin是个轻量级的框架.如果想要一个类如aspnetmvc帮我们搭建好了的goweb框架,beego值得去学习.否则gin下面需要动手构建好多代码.新手还是先学现成的节约时间成本. ...

  6. 期末人福音——用Python写个自动批改作业系统

    一.亮出效果 最近一些软件的搜题.智能批改类的功能要下线. 退1024步讲,要不要自己做一个自动批改的功能啊?万一哪天孩子要用呢! 昨晚我做了一个梦,梦见我实现了这个功能,如下图所示:功能简介:作对了 ...

  7. 使用强大的DBPack处理分布式事务(PHP使用教程)

    主流的分布式事务的处理方案 近些年,随着微服务的广泛使用,业务对系统的分布式事务处理能力的要求越来越高. 早期的基于XA协议的二阶段提交方案,将分布式事务的处理放在数据库驱动层,实现了对业务的无侵入, ...

  8. 全国降雨侵蚀力因子R值

      数据下载链接:百度云下载链接​ 降雨侵蚀力因子其实是反应降雨对土壤侵蚀的潜在能力,就是降雨的冲刷对土壤的侵蚀效应. 在过去几天查阅文献资料的过程中,本人亲眼看见过的关于因子R的计算方法就超过30种 ...

  9. Effective C++阅读笔记 较详细 复杂条款带样例

    一.让自己习惯C++ 条款01:视C++为一个语言联邦 C++可视为: C:以C为基础. 面向对象的C++:添加面向对象特性. 模板C++:泛型编程概念,使用模板. STL:使用STL的容器.迭代器. ...

  10. 一个月后,我们又从 MySQL 双主切换成了主 - 从!

    这是悟空的第 157 篇原创文章 官网:www.passjava.cn 你好,我是悟空. 一.遇到的坑 一个月前,我们在测试环境部署了一套 MySQL 高可用架构,也就是 MySQL 双主 + Kee ...