助你完全理解React高阶组件(Higher-Order Components)
助你完全理解React高阶组件(Higher-Order Components)原文地址:https://github.com/brickspert... (如果你觉得对你有帮助,请在github给个star~您的start是我不断创作的动力!)
高阶组件定义
翻译:高阶组件就是一个函数,且该函数接受一个组件作为参数,并返回一个新的组件。 理解了吗?看了定义似懂非懂?继续往下看。 函数模拟高阶组件我们通过普通函数来理解什么是高阶组件哦~
function welcome() { let username = localStorage.getItem('username'); console.log('welcome ' + username); } function goodbey() { let username = localStorage.getItem('username'); console.log('goodbey ' + username); } welcome(); goodbey();
function welcome(username) { console.log('welcome ' + username); } function goodbey(username) { console.log('goodbey ' + username); } function wrapWithUsername(wrappedFunc) { let newFunc = () => { let username = localStorage.getItem('username'); wrappedFunc(username); }; return newFunc; } welcome = wrapWithUsername(welcome); goodbey = wrapWithUsername(goodbey); welcome(); welcome(); 好了,我们里面的 我们增加个用户 function study(username){ console.log(username+' study'); } study = wrapWithUsername(study); study(); 这里你是不是理解了为什么说 我们写平时写代码的时候,不用关心 高阶组件高阶组件就是一个没有副作用的纯函数。 我们把上一节的函数统统改成
import React,{Component} from 'react' class Welcome extends Component { constructor(props) { super(props); this.state = { username: '' } } componentWillMount() { let username = localStorage.getItem('username'); this.setState({ username: username }) } render() { return ( <div>welcome {this.state.username}</div> ) } } export default Welcome;
import React,{Component} from 'react' class Goodbye extends Component { constructor(props) { super(props); this.state = { username: '' } } componentWillMount() { let username = localStorage.getItem('username'); this.setState({ username: username }) } render() { return ( <div>goodbye {this.state.username}</div> ) } } export default Goodbye;
按照上一节 import React,{Component} from 'react' export default (WrappedComponent) => { class NewComponent extends Component { constructor() { super(); this.state = { username: '' } } componentWillMount() { let username = localStorage.getItem('username'); this.setState({ username: username }) } render() { return <WrappedComponent username={this.state.username}/> } } return NewComponent } 这样我们就能简化 import React,{Component} from 'react'; import wrapWithUsername from 'wrapWithUsername'; class Welcome extends Component { render() { return ( <div>welcome {this.props.username}</div> ) } } Welcome = wrapWithUsername(Welcome); export default Welcome; import React,{Component} from 'react'; import wrapWithUsername from 'wrapWithUsername'; class Goodbye extends Component { render() { return ( <div>goodbye {this.props.username}</div> ) } } Goodbye = wrapWithUsername(Goodbye); export default Goodbye; 看到没有,高阶组件就是把 到这里位置,高阶组件就讲完了。你再返回去理解下定义,是不是豁然开朗~ 你现在理解 把 ConnectedComment = connect(mapStateToProps,mapDispatchToProps)(Component); 相当于这样 // connect是一个返回函数的函数(就是个高阶函数) const enhance = connect(mapStateToProps,mapDispatchToProps); // 返回的函数就是一个高阶组件,该高阶组件返回一个与Redux store // 关联起来的新组件 const ConnectedComment = enhance(Component);
const WrappedNormalLoginForm = Form.create()(NormalLoginForm); 参考地址:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |