我有一个返回功能组件的HOC(高阶组件)。我想使用useState,但收到以下错误消息:
“src/HOC.js第5:35行:不能在回调内调用React Hook“useState”。必须在React函数组件或自定义React Hook函数React Hook/rules of Hook中调用React Hook”
import React, { useState } from "react";
const HOC = (Component, data) => {
return () => {
const [count, setCount] = useState(data); // Error here
const handleClick = () => {
setCount(count + 1);
};
return (
<Component
countNumber={count}
handleClick={handleClick}
/>
)
}
};
export default HOC;
import React from "react";
import HOC from "./HOC";
const LikesCount = ({countNumber, handleClick}) => {
return (
<div>
{countNumber} <br />
<button onClick={handleClick}>Like</button>
</div>
);
}
const EnhancedLikes = HOC(LikesCount, 5);
export default EnhancedLikes;
有没有办法在这个HOC场景中使用useState?
正如评论中所讨论的,我将发布上面HOC的自定义钩子对应物:
就我在代码中所理解的,您需要一个HOC,您可以将它“挂接”到组件,它将执行计数。
因此,您可以创建自定义挂钩:
const useCounter = (default = 0) => {
const [count, setCount] = useState(default);
const [add, setAdd] = useState(0);
const handleClick = (base = 0) => {
setCount(count + base + add);
};
const onSetAdd = (e) => setAdd(e.target.value);
return {count, handleClick, onSetAdd};
}
现在将其挂接到功能组件中:
const LikesCount = () => {
const {count, handleClick, onSetAdd} = useCounter(0);
const onAddOne = () => handleClick(); // default is 1, so passing none = one
const onAddTwo = () => handleClick(2);
const onAddThree = () => handleClick(3);
return (
<div>
<input type="number" onChange={onSetAdd} value={add} />
{count} <br />
<button onClick={onAddOne}>Like</button>
<button onClick={onAddTwo}>Add 2</button>
<button onClick={onAddThree}>Add 3</button>
</div>
);
}
export default LikesCount;
就这样,您可以在想要计数器的任何组件上添加ff代码:
const {count, handleClick} = useCounter(0);
上面的代码与您提供的示例HOC完全相同。
本文向大家介绍使用高阶组件(HOC)实现一个loading组件相关面试题,主要包含被问及使用高阶组件(HOC)实现一个loading组件时的应答技巧和注意事项,需要的朋友参考一下
我指的是这个创建React高阶组件的例子,摘自本文。 我正在努力完全理解 下面是我对上述代码的理解: 我们通过名称定义了一个HOC,它接受一个React组件(BaseComponent)。BaseComponent附带了它的props(称为P),它返回一个新的React组件,该组件接受props P 如何使用此HOC?以下尝试给出了一个打字脚本错误,即传递了太多参数: Modal React组件具
本文向大家介绍高阶组件(HOC)有哪些优点和缺点?相关面试题,主要包含被问及高阶组件(HOC)有哪些优点和缺点?时的应答技巧和注意事项,需要的朋友参考一下 HOC 优点 通过传递props去影响内层组件的状态,不直接改变内层组件的状态,降低了耦合度 缺点 组件多层嵌套, 增加复杂度与理解成本 ref隔断, React.forwardRef 来解决 高阶组件多层嵌套,相同命名的props会覆盖老属性
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,然而高阶组件将一个组价转化成另外一个组件
本文向大家介绍React.js中的高阶组件,包括了React.js中的高阶组件的使用技巧和注意事项,需要的朋友参考一下 高阶部分简称为hoc。这是一种接收组件并返回具有附加功能的新组件的模式。 // hoc是自定义JavaScript函数的名称 我们使用带有状态和/或道具的组件来构建UI。hoc用类似的方法从提供的组件中构建一个新组件。 使用hoc在React中成为一个横切关注点。这些组件将负责单