首先是教学视频中的代码:
οnclick={ ()=>{this.props.history.push(’/product/detail’) }
可以看到是没有花括号的,至于为什么要复习这个知识点,是因为我自己在写的时候,看到函数体只有一句的时候,想到的是有两种情况的,一是没有return,二是有retuyrn,在我自己写的时候,就给这里补上了return,
自己的代码:(最初)
<LinkButton onClick={
()=>{
return this.props.history.push('/product/detail')}}>详情</LinkButton>
虽然和视频不同,但是也达到了,点击按钮跳转页面的目的,但是却感觉哪里不对,
去复习了一下箭头函数的花括号省略情形:
- 1.使用了花括号,就不能省略return;
- 2.只有在省略了花括号的情况下,才有可能省略return
- 3.函数体只有一句的时候,可以省略花括号
- 4.只有一句的时候,并且是return xxx的时候,可以连带return一起省略
我测试了取消return缺不取消花括号的情况
<LinkButton onClick={
()=>{
this.props.history.push('/product/detail')}}>详情</LinkButton>
结果也是没有影响的,照样能跳转
然后再看这里为什么我写了return和不写都是一样的,才反应过来,
此处不应该是return this.props。。。因为,目的是让这个函数执行,而不是让他有一个返回值,而且,就算有返回值,在这种情况下,也没有地方接收,所以this.props.history.push会返回一个undefined然后再return上去一个undefined,没有地方接收这个,但是this.props.history.push也已经运行了,所以对目标没有影响,但实际上不写return才是正确的,因为只有一行代码,所以可以省略花括号, 至于为什么纠结这个return,是因为教学视频里面没用花括号,自己却用了,然后把何时能省略return记混淆了。
所以真相了,写不写return,都会把我的目标函数history.push()运行,
有return的会返回undefinedÿ