唠叨几句啦
在看程墨老师的深入浅出高阶组件,开头一点提了一个需要,创建两个高阶组件,一个能给传入的元素自定义添加props,一个是删除特定的props。我刚刚做了一下,发现高阶组件需要区分好传入的是class还是react element, 同时也需要注意好return回去的是啥。顺便提一下高阶组件的概念,就说一个函数,能够接受一个组件作为参数,然后返回的时候,这个组件就带有这个高阶组件给的某些特性。我理解就跟掉泥坑了,得带点土出来一个道理。
对比一下两个组件,贴代码时刻来啦
删除属性的高阶组件
我们需要传入任何组件和参数,都把user参数给删除了,所以返回值是一个接收props属性的函数。
import React from "react" function removeUserProp(WrappedComponent) { return function newRender(props) { const {user, ...otherProps} = props;// 删除user这个属性值 return <WrappedComponent {...otherProps} /> } } export default removeUserProp
使用的时候
const RemoveComponent = removeUserProp(reactComponentClass)({user: "aa"});// 这里返回的是一个react component render () { return <div> {RemoveComponent} </div> }
增加属性的高阶组件
import React from "react" const addNewProps = function (WrappedComponent, newProps) {// 接收的是一个class作为参数,返回一个class return class WrappingComponent extends React.Component { render () { return <WrappedComponent {...this.props} {...newProps}/> } } } export default addNewProps
使用的时候,返回值是class,所以要用<ReactClassName/>转换成可以渲染的react组件
const AddUserComponent = addNewProps(SampleComponent, {user: "aa"}) render () { return <AddUserComponent /> }
完整的使用的例子代码:
import React from "react" import addNewProps from './addNewProps' import removeUserProp from './removeUserProp' class SampleComponent extends React.Component { constructor(props) { console.log(props) super(props) } render () { console.log(this.props) return <div> { this.props.user ? <p>哈哈哈</p> : <p>哈哈哈2</p> } </div> } } class Test extends React.Component { render () { var obj = {aa: "aa"} const AddUserComponent = addNewProps(SampleComponent, {user: "aa"}) const RemoveUserComponent = removeUserProp(SampleComponent)({user: "aa"}) return <div> <AddUserComponent /> {RemoveUserComponent} </div> } } export default Test
一点点小收获就是明白了高阶组件要看清楚输入输出。class跟react element的区别。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊html" target="_blank">教程。
ADDING AND REMOVING SOFTWARE Linux 或任何操作系统中最基本的任务之一便是添加和删除软件。您经常需要安装发行版中没有附带的软件,或者删除不需要的软件,这样就不会占用硬盘空间。 有些软件安装需要依赖其他软件才能运行,有时您会发现您可以在软件包安装过程中一次性下载所需的所有软件,软件包是一组文件(通常是库和其他依赖项),您需要这些文件才能使软件成功运行。当您安装一个包时
我有一个HOC,它为包装的组件提供一个属性。 我想写的打字稿类型定义,正确地公开由这个HOC创建的组件的道具类型:基本上复制(推断)包装组件的道具类型,并删除我的HOC提供的属性。有可能吗? 在下面的示例中,我有一个HOC,它为任何接受它的包装组件提供了prop。因此,组件应该有props,不包括,这意味着只有。然而TypeScript显然仍然认为组件也应该获得属性。 我使用Typescript
问题内容: 当前的官方文档仅显示如何动态 更改 标签 内 的组件。 我想实现的是,让我们说我有3个部分组成:,,并具有以下选择: 再有6个按钮,这将增加或删除每个组件:,,和 当我单击时,该页面将添加到呈现它的页面中,因此该页面将包含: 然后,如果我单击两次,该页面现在将包含: 如果单击,该页面现在将包含所有这些组件: 可以在Angular中实现吗?请注意,这不是我要寻找的解决方案,因为它仅允许向
本文向大家介绍React实现评论的添加和删除,包括了React实现评论的添加和删除的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了React实现评论添加和删除的具体代码,供大家参考,具体内容如下 一、效果图 二、需求描述 1. 手动输入用户名和评论内容,点击提交;输入内容被追加到右侧评论列表; 2. 点击评论列表的“删除”按钮,弹框提示确定删除用户“xx”; 3. 点击“确定”,“
Examples Using the `withRouter` utility 如果你想应用里每个组件都处理路由对象,你可以使用withRouter高阶组件。下面是如何使用它: import { withRouter } from 'next/router' const ActiveLink = ({ children, router, href }) => { const style =
在React中,高阶组件是重用组件逻辑的一项高级技术。高阶组件并不是React API的一部分。高阶组件源自于React生态。 具体来说,高阶组件是一个函数,能够接受一个组件并返回一个新的组件。 const EnhancedComponent = higherOrderComponent(WrappedComponent); 组件是将props转化成UI,然而高阶组件将一个组价转化成另外一个组件