【发布时间】:2021-12-30 08:59:32
【问题描述】:
在我的项目中,我想将所有console.log 保存在一个数组中。
我创建了一个简单的示例来代表我正在尝试做的事情。
- 一个简单的按钮,按下时会登录到控制台。
- 所有记录消息的数组
- 一个覆盖
console.log函数的useEffect挂钩。
但是,数组不会超过 1 个项目。
代码:
import { useState, useEffect } from "react";
export default function App() {
const [myLogs, setMyLogs] = useState<any[]>([]);
useEffect(() => {
var log = console.log;
console.log("from useEffect");
console.log = function () {
var args = Array.prototype.slice.call(arguments);
log.apply(this, args);
setMyLogs({ ...myLogs, ...args });
};
}, []);
return (
<div>
<button onClick={() => console.log("clicked :)")}>Click to Log</button>
<p>{myLogs.toString()}</p>
</div>
);
}
我尝试将myLogs 添加为useEffect 钩子的依赖项,认为它可能会有所帮助,但它只是创建了一个无限循环。 (这部分我明白了)
【问题讨论】:
-
顺便说一句,在我看来,覆盖全局 console.log 函数来设置 React 组件中的状态并不是一个好主意。您打算这样做有什么特别的原因吗?
标签: react-hooks