React—高阶函数

0x00 前言

文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取

0x01 高阶函数

满足2个规范中的任何一个都是高阶函数。

  • 接受的参数是一个函数
  • 调用的返回值是一个函数

1.调用的返回值是一个函数

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello_react</title>
</head>

<body>
    <div id="test"></div>
    <div id="test2"></div>
    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/javascript" src="../js/prop-types.js"></script>
    <script type="text/babel">
        class Login extends React.Component{

            state={
                username:"",
                password:""
            }

            render(){
                return(
                    <div>
                        <form action="" onSubmit={this.handleSubmit}>
                            用户名:<input onChange={this.saveFormData("username")} type="text" name="username"/>    
                            密码:<input  onChange={this.saveFormData("password")} type="password" name="password"/>  
                            <button>登录</button>  
                        </form>
                    </div>
                )
            }

            handleSubmit = (event)=>{
                
                event.preventDefault()
                const {username,password} = this.state
                alert(`您输入的账号是${username},输入的密码是${password}`)
            }

            saveFormData = (dataType) =>{
                return (event)=>{
                    this.setState({[dataType]:event.target.value})
                }
            }
        }

        ReactDOM.render(<Login/>,document.getElementById("test"))
    </script>
</body>

</html>

2.函数的柯里化

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>hello_react</title>
</head>

<body>
    <div id="test"></div>
    <div id="test2"></div>
    <script type="text/javascript" src="../js/react.development.js"></script>
    <script type="text/javascript" src="../js/react-dom.development.js"></script>
    <script type="text/javascript" src="../js/babel.min.js"></script>
    <script type="text/javascript" src="../js/prop-types.js"></script>
    <script type="text/javascript">
        function sum(a){
            return (b)=>{
                return (c) =>{
                    return a+b+c
                }
            }
        }
        const result=sum(1)(2)(3);
        console.log(result);
    </script>
</body>

</html>

other

欢迎大家关注我朋友的公众号 皓月当空w 分享漏洞情报以及各种学习资源,技能树,面试题等。

以上

React 高阶函数可以在许多场景中运用,以下是一些常见的应用示例: 1. 权限控制:通过高阶函数可以实现对组件的访问权限控制。例如,可以创建一个名为 `withAuth` 的高阶函数,它根据用户的登录状态来决定是否渲染原始组件。 ```jsx function withAuth(WrappedComponent) { return function WithAuth(props) { const isLoggedIn = checkUserLoginStatus(); // 检查用户登录状态的函数 if (isLoggedIn) { return <WrappedComponent {...props} />; } else { return <div>请先登录</div>; } } } const MyComponent = () => <div>需要登录才能看到的内容</div>; const AuthComponent = withAuth(MyComponent); // 使用增强后的组件 <AuthComponent /> ``` 2. 数据获取:通过高阶函数可以封装数据请求逻辑,使组件可以方便地获取数据并进行渲染。例如,可以创建一个名为 `withDataFetching` 的高阶函数,它负责从 API 获取数据,并将数据作为 props 传递给原始组件。 ```jsx function withDataFetching(WrappedComponent, url) { return function WithDataFetching(props) { const [data, setData] = useState(null); useEffect(() => { fetchData(); }, []); async function fetchData() { try { const response = await fetch(url); const jsonData = await response.json(); setData(jsonData); } catch (error) { console.error('Error fetching data:', error); } } return <WrappedComponent {...props} data={data} />; } } const MyComponent = ({ data }) => { if (!data) { return <div>Loading...</div>; } return ( <ul> {data.map(item => ( <li key={item.id}>{item.name}</li> ))} </ul> ); }; const DataComponent = withDataFetching(MyComponent, 'https://api.example.com/data'); // 使用增强后的组件 <DataComponent /> ``` 3. 状态管理:通过高阶函数可以封装一些公共状态,使多个组件可以共享该状态。例如,可以创建一个名为 `withTheme` 的高阶函数,它将主题信息作为 props 传递给原始组件。 ```jsx function withTheme(WrappedComponent) { return function WithTheme(props) { const theme = useContext(ThemeContext); // 使用 Context 获取主题信息 return <WrappedComponent {...props} theme={theme} />; } } const MyComponent = ({ theme }) => ( <div style={{ background: theme.background, color: theme.text }}> 主题样式 </div> ); const ThemedComponent = withTheme(MyComponent); // 使用增强后的组件 <ThemedComponent /> ``` 这些只是一些常见的应用场景,实际上,React 高阶函数非常灵活,可以根据具体需求来定义和使用。它们可以帮助我们在不改变原始组件的情况下,增加、修改或封装组件的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值