小编Bon*_*Fir的帖子

如何解决功能组件上的 jsx-no-bind 错误?

我有一个小组件可以更改我网站的语言。由于 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 代码约定[链接])。但其他一些人表示,它的性能改进可以忽略不计,并且降低了代码的可读性(就像这个[链接])。这里有两个问题:

  1. 如何解决该错误(即不禁用jsx-no-bind)。
  2. 您对配置有什么建议jsx-no-bind(即我是否应该从 eslint 配置中完全/部分删除它?)。

PS:网上有更多关于将箭头函数或绑定方法作为 props 传递的文档。但我在问题陈述中只提到了其中两个。

javascript jsx reactjs

10
推荐指数
2
解决办法
7394
查看次数

当客户端取消连接时,Nginx(作为 revser 代理)不会通知 gin-gonic(作为 Web 服务器)

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 个客户端,这项工作按预期进行,但对于 …

nginx go go-gin nginx-reverse-proxy

7
推荐指数
0
解决办法
707
查看次数

标签 统计

go ×1

go-gin ×1

javascript ×1

jsx ×1

nginx ×1

nginx-reverse-proxy ×1

reactjs ×1