我有一个小组件可以更改我网站的语言。由于 eslint 配置为jsx-no-bind,因此它会在以下代码中引发错误。
const ChangeLanguage = ({ toggleLanguage }) => {
const toggle = () => {
console.log('hi')
toggleLanguage()
}
return (
<IconButton
onClick={toggle}
>
<Language /> // this is an svg-icon
</IconButton>
)
}
export default connect(null, { toggleLanguage })(ChangeLanguage)
Run Code Online (Sandbox Code Playgroud)
我用谷歌搜索了jsx-no-bind用法。有人说我们应该启用它,因为在每个渲染中 javascript 都会生成新函数,并导致不必要的渲染(如 Airbnb 代码约定[链接])。但其他一些人表示,它的性能改进可以忽略不计,并且降低了代码的可读性(就像这个[链接])。这里有两个问题:
jsx-no-bind)。jsx-no-bind(即我是否应该从 eslint 配置中完全/部分删除它?)。PS:网上有更多关于将箭头函数或绑定方法作为 props 传递的文档。但我在问题陈述中只提到了其中两个。
在gin-gonic用作网络服务器和nginx代理服务器的网站中,客户端通过gin-conic公开的 API将他们的数据发送到服务器,并且为了向客户端发送服务器命令,每个(即客户端)都与网络服务器建立连接,并保留它很长一段时间(即几个小时内不会过期)并用所需的命令填充他们的响应主体(对于双向连接,我们可以使用它ws来代替)。
问题是我们需要了解客户端是否删除/取消了与服务器的连接。为了理解我们case <-c.Request.Context().Done():在下面的代码中有这一行。
func MakeConnection(c *gin.Context) {
// ... code
select {
case notification = <-clientModel.Channels[token]:// we have a command to send to user
log.Info("Notification")
err = nil
case <-c.Request.Context().Done(): // connection dropped by client
log.Info("Cancel")
err = c.Err()
case <-ctx.Done(): // time elapsed and there was no command to send to client
log.Info("timeout")
err = errors.New("timeout exceeded")
}
// ... code
}
Run Code Online (Sandbox Code Playgroud)
一切正常(如果我们与服务器建立这样的连接并在任意时间后取消它,立即Cancel显示在终端中),直到客户端数量增加。
对于大约 5 个客户端,这项工作按预期进行,但对于 …