在使用类组件时,总是建议不要使用内联匿名函数,因为它对性能不利,即
<input value{this.state.title}
onChange={(event) => this.setState({title: event.target.value})} />
Run Code Online (Sandbox Code Playgroud)
您通常必须在渲染方法之外创建一个名为 handleChange 的函数。这意味着每个渲染都不会创建一个新的内联匿名函数。
这让我想到了功能组件和 useState 等。
功能组件是渲染,所以如果我这样做
[title, setTitle] = useState()
<input value{this.title}
onChange={(event) => this.setTitle({title: event.target.value})} />
Run Code Online (Sandbox Code Playgroud)
这将与创建函数相同,因为无论如何都会在每次创建函数 - 在函数组件中
我知道可以使用 useCallback 钩子来缓存函数,但也建议不要过度使用它们,因为反应速度很快,并且使用 useCallback 实际上对于简单的情况可能很糟糕。
所以,这让我回到了我原来的问题。
在函数组件内部,我们应该使用内联匿名函数吗?考虑到在功能组件内创建一个函数无论如何都会被创建。
无论如何我认为两者都是垃圾收集
有人知道推荐的方法吗?
提前致谢
前段时间我曾经使用来自joyent的Verror在重新抛出时不会丢失堆栈跟踪,我刚刚在没有Verror的情况下使用节点v12进行了测试,并且堆栈跟踪似乎在不使用错误的情况下持续存在。
然后我正在查看 Error.captureStackTrace 的使用,它声明在您的错误中使用它,以便错误不会添加到堆栈中。
我不知道我做错了什么,但有或没有 Error.captureStackTrace - 堆栈跟踪是相同的..
我想知道使用 captureStackTrace 的当前状态,因为我认为没有区别:-) 以及似乎不再需要的 VError 的使用。
在文档中,它指出 .stack 在不调用 captureStackTrace 的情况下不可用,但我每次都看到它可用,无论是否有 captureStackTrace
这是 2 x 错误的示例
class MyErrorOne extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, this.constructor);
}
}
class MyErrorTwo extends Error {
constructor(message) {
super(message);
Error.captureStackTrace(this, this.constructor);
}
}
Run Code Online (Sandbox Code Playgroud)
我通过在每个错误中注释掉 captureStackTrace 来尝试它们,并且堆栈跟踪是相同的。
任何人都可以帮忙吗?
这是我测试调用错误的代码
const DoOne = () => {
try {
console.log("executing do one");
DoTwo();
} catch (error) {
console.log("error in DoOne", error);
console.log("here is the stack ", error.stack);
throw …Run Code Online (Sandbox Code Playgroud) 我试图将 div 的内容居中,我的父容器设置为“相对”。
我在内部 div 上使用它
position: absolute;
margin: auto;
width: 70px;
height: 70px;
Run Code Online (Sandbox Code Playgroud)
但它拒绝居中,我不得不添加左侧和右侧的0,但我不明白为什么即
position: absolute;
right: 0;
left: 0;
margin: auto;
width: 70px;
height: 70px;
Run Code Online (Sandbox Code Playgroud)
我以为居中只需要一个宽度,这是有的。
我有点困惑为什么将右/左设置为 0 - 似乎有效。
另外,如果图像是 70 像素,父框是 200 像素(确实如此),将右侧设置为 0,左侧设置为 0 - 这实际上是在做什么?
任何想法,我可能没有正确理解。
谢谢。