-
Notifications
You must be signed in to change notification settings - Fork 548
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
助你完全理解React高阶组件(Higher-Order Components) #2
Comments
666.写这么详细。我今天才重构了我的第一篇文章。 |
写的非常的好 |
写的好棒!一看就明白了,感谢感谢 |
好棒,我也来看啦 |
受教了 |
清晰易懂,感谢分享 |
讲解通俗易懂,满分! |
写的好棒~瞬间理解了 |
不错,通俗易懂 |
讲的很赞 |
666 |
写的太好了,你这么大神我们加下QQ号吧,日后可以更好的交流3154329581 |
记得加我啊 |
感谢 |
喜欢这种不装B的直白描述 |
挺好的文章! |
厉害 |
前面用函数做例子后面再引入组件很棒,没有那么多虚头巴脑的名词,浅显易懂,赞! |
必须赞,写的太好了 |
666,简单明了,太棒了 |
很棒 |
清晰明了,赞~ |
为什么函数里还要套上一层函数? |
通熟易懂 |
不返回一个新的函数,外面怎么调用? |
仔细看,函数里套上一层函数 是为了将内部方法封装并返回。你可以在外部拿到newFunc ,它在什么时候执行有你来决定。
比如 let foo = wrapWithUsername(wrappedFunc) ,foo拿到了 newFunc ,foo什么时候执行有你决定。
下边不嵌套的方式 wrapWithUsername(wrappedFunc) 会直接执行newFunc 内部的方法。
…------------------ 原始邮件 ------------------
发件人: "张致豪"<notifications@github.com>;
发送时间: 2019年9月29日(星期天) 中午11:05
收件人: "brickspert/blog"<blog@noreply.github.com>;
抄送: "Subscribed"<subscribed@noreply.github.com>;
主题: Re: [brickspert/blog] 助你完全理解React高阶组件(Higher-Order Components) (#2)
为什么函数里还要套上一层函数?
function wrapWithUsername(wrappedFunc) {
let newFunc = () => {
let username = localStorage.getItem('username');
wrappedFunc(username);
};
return newFunc;
}
这样写不行吗?
function wrapWithUsername(wrappedFunc) {
let username = localStorage.getItem('username');
wrappedFunc(username);
}
不返回一个新的函数,外面怎么调用?
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.
|
直白易懂 |
醍醐灌顶 |
666 |
不错不错 |
您仔细看,返回的是一个回调函数,类似函数柯里化 |
讲的太好了= = |
助你完全理解React高阶组件(Higher-Order Components)
高阶组件定义
翻译:高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。
理解了吗?看了定义似懂非懂?继续往下看。
函数模拟高阶组件
我们通过普通函数来理解什么是高阶组件哦~
welcome
,一个goodbye
。两个函数先从localStorage
读取了username
,然后对username
做了一些处理。我们发现两个函数有一句代码是一样的,这叫冗余唉。不好不好~(你可以把那一句代码理解成平时的一大堆代码)
我们要写一个中间函数,读取
username
,他来负责把username
传递给两个函数。好了,我们里面的
wrapWithUsername
函数就是一个“高阶函数”。他做了什么?他帮我们处理了
username
,传递给目标函数。我们调用最终的函数welcome
的时候,根本不用关心username
是怎么来的。我们增加个用户
study
函数。这里你是不是理解了为什么说
wrapWithUsername
是高阶函数?我们只需要知道,用wrapWithUsername
包装我们的study
函数后,study
函数第一个参数是username
。我们写平时写代码的时候,不用关心
wrapWithUsername
内部是如何实现的。高阶组件
高阶组件就是一个没有副作用的纯函数。
我们把上一节的函数统统改成
react
组件。welcome
函数转为react
组件。goodbey
函数转为react
组件。按照上一节
wrapWithUsername
函数的思路,我们来写一个高阶组件(高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件)。这样我们就能简化
Welcome
组件和Goodbye
组件。看到没有,高阶组件就是把
username
通过props
传递给目标组件了。目标组件只管从props
里面拿来用就好了。到这里位置,高阶组件就讲完了。你再返回去理解下定义,是不是豁然开朗~
你现在理解
react-redux
的connect
函数~把
redux
的state
和action
创建函数,通过props
注入给了Component
。你在目标组件
Component
里面可以直接用this.props
去调用redux state
和action
创建函数了。相当于这样
antd
的Form也是一样的参考地址:
❤️感谢大家
关注公众号「前端技术砖家」,拉你进交流群,大家一起共同交流和进步。
The text was updated successfully, but these errors were encountered: