小编Har*_*mer的帖子

在阈值范围内理解 invertExtent

我正在通过 Mike Bostock 的等值线图(缓慢地)工作,并在写下每一点以确保我理解它。我特别难以理解一点。该示例在线:https : //bl.ocks.org/mbostock/4060606

在代码中的某一点,Bostock 有一系列颜色,并将它们的反向范围(如果输入到色标中会产生该颜色的最小值和最大值)添加到地图中。对于每个“d”(两种颜色的数组),他使用 color.invertExtent(d) 来获得最小值和最大值。在函数结束时,他将“d”值(现在是两个数字的数组,最小值和最大值)返回到映射。这个我明白。

g.selectAll("rect")
  .data(color.range().map(function(d) {
      d = color.invertExtent(d);
      if (d[0] == null) d[0] = x.domain()[0];
      if (d[1] == null) d[1] = x.domain()[1];
      return d;
    }))
Run Code Online (Sandbox Code Playgroud)

但是,他还包括两个我不明白的“if”块。为什么它们是必要的?为什么这个双色数组的 d[0] 或 d[1] 永远等于“null”?为什么他将它们分配给 x.domain[0](在本例中为 600)和 x.domain[1] 为 860。在什么情况下“null”甚至会成为结果?

javascript d3.js

4
推荐指数
1
解决办法
1592
查看次数

D3 中 .remove() 的临时替代方案

我正在开发一个项目,在该项目中我将工具提示附加到 DOM。当我将鼠标悬停在一个对象上时,工具提示会逐渐消失。当我离开时,工具提示淡出。

我遇到的问题是,它仍然在其他元素之上,因此阻止了它们的鼠标悬停事件触发。通常,我只会删除元素:d3.select("#theElement").transition().style("opacity",0).remove()

问题是,我希望能够稍后在鼠标悬停时重新附加它。有没有办法暂时将工具提示添加到它不会妨碍的地方?也许在 DOM 中或其他什么?大多数人在 D3 中是如何处理这个问题的?

javascript css tooltip mouseevent d3.js

4
推荐指数
2
解决办法
575
查看次数

Puppeteer 在无头模式下挂起

我的 Puppeteer 脚本在无头模式下运行并且超时。

我不确定到底出了什么问题。该脚本在本地运行良好,但是当我在无头模式下运行时,它总是超时。

我在网上阅读过,这可能是由于脚本无法加载外部 javascript 源?有没有其他人遇到过这个问题,并能够提供帮助?

这是我的 Puppeteer 实例的设置函数:

 setUpPuppeteer: async () => {
    const headless = process.env.NODE_ENV === "production";
    const browser = await pupeteer.launch({
      headless,
      devtools: true,
      args: ['--no-sandbox' ]
    });
    const context = await browser.createIncognitoBrowserContext();
    const page = await context.newPage(); // Create new instance of puppet

    page.on('error', err => {
      logger.error('Puppeteer error.', err);
    });

    page.setDefaultNavigationTimeout(10000);

    if (process.env.NODE_ENV === 'production') {
      await page.setRequestInterception(true); // Optimize (no stylesheets, images)...
      page.on('request', request => {
        if (['image', 'stylesheet'].includes(request.resourceType())) {
          request.abort();
        } …
Run Code Online (Sandbox Code Playgroud)

javascript timeout google-chrome-headless puppeteer

4
推荐指数
1
解决办法
2974
查看次数

使用多个装饰器将 Type-GraphQL 与 Typegoose 结合起来

我正在使用 Type-GraphQl (这是一个 Typescript 库,可让您使用 Typescript 类自动生成 GraphQL 架构和解析器)和 Typegoose (它对 Mongoose 查询执行相同的操作)。我正在尝试减少定义数据的文件数量,理想情况下这样我就只能获得 GQL 和 MongoDB 中数据的一个真实来源。

是否可以将这两个库组合起来,以便我使用单个 Typescript 类在一个文件中描述我的 GQL 架构和 Mongoose 类型

例如,一个简单的 type-graphql 文件(定义“book”类型)如下所示:

import { Field, ObjectType } from "type-graphql";
import { InStock } from "./gql/shared/types";

@ObjectType()
export class Book extends InStock {
  @Field()
  title: string;

  @Field()
  publicationDate: Date;

  @Field()
  author: string;

  @Field()
  pages: number;
}
Run Code Online (Sandbox Code Playgroud)

该类typegoose看起来非常相似,但使用@prop装饰器来设置模式的属性:

import * as mongoose from "mongoose";
import { getModelForClass, prop } from "@typegoose/typegoose";
import …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb typescript typegraphql typegoose

3
推荐指数
1
解决办法
3243
查看次数

使用 Neovim 配置 Packer

我正在尝试将 Neovim 的当前设置(使用 Vim Plug)切换到 Packer,但遇到了麻烦。

我的 Neovim 是从~/.config/nvim/init.lua我的所有插件和其他设置的来源加载的。它们主要位于~/lua我的配置的文件夹(“主导入”)部分中,包括plug-plugins.lua引用所有插件的实际文件。

-- Main Imports
require("settings")
require("colors")
require("mappings")
require("functions")
require("autocommands")
require("plug-plugins")
...
Run Code Online (Sandbox Code Playgroud)

稍后在同一个init.lua文件中,我为所有这些插件获取插件特定设置。为了让我的目录当前正常工作,我正在安装所有内容并且:PlugInstall工作正常。


...

-- Plugin-specific settings
require("plugin-settings/fzf")
require("plugin-settings/fugitive")
require("plugin-settings/ultisnips")
require("plugin-settings/coc")
require("plugin-settings/treesitter")
require("plugin-settings/miscellaneous")
require("plugin-settings/toggle-terminal")

Run Code Online (Sandbox Code Playgroud)

安装加壳器

Packer 的安装步骤非常稀疏,只是声明您应该将存储库克隆到“packpath”中的某个位置,但我不太清楚这意味着什么。当我进入 Neovim 时,按下:set packpath?我会得到以下路径:

packpath=~/.config/nvim,/etc/xdg/nvim,~/.local/share/nvim/site,/usr/local/share/nvim/site,/usr/share/nvim/site,/usr/local/Cellar/neovim/HEAD-b74916c_1/share/nvim/runtime,/usr/local/Cel
lar/neovim/HEAD-b74916c_1/lib/nvim,/usr/share/nvim/site/after,/usr/local/share/nvim/site/after,~/.local/share/nvim/site/after,/etc/xdg/nvim/after,~/.config/nvim/after
Run Code Online (Sandbox Code Playgroud)

这让我认为我可以将存储库克隆到~/.config/nvim列出的第一个路径。我不太确定下一步该做什么,或者这是否正确。

有人可以帮忙吗?安装 Packer 的基本步骤是什么(我使用的是 MacOS 11.6)。

lua packer neovim

3
推荐指数
1
解决办法
2万
查看次数

通过 Axios/Express 返回错误值到 React App

我有一个handleSubmit函数可以从后端获取数据作为更大组件的一部分。当后端出现故障时,我想将错误信息发送到我的 redux 存储和/或本地组件,但我无法这样做。

handleSubmit函数看起来像这样(它使用了正确连接的 React 钩子。如果有用,可以发布完整的组件):

const handleSubmit = async (e, { dataSource, filter, filterTarget }) => {

    e.preventDefault();
    setIsLoading(true);
    setErrorValue(null);
    setError(false);

    const token = localStorage.JWT_TOKEN;
    const link = filterTarget === "Identifier" ? `http://localhost:8081/api/${dataSource}/${filter}`: `http://localhost:8081/api/${dataSource}?filter=${filter}&filterTarget=${filterTarget}`;

    try {
        let data = await axios.get(link, { headers: { authorization: token }});
        props.setData(data);
        setError(false);
        setIsLoading(false);
    } catch (err){           
        setErrorValue(err.message);
        setError(true);
        setIsLoading(false);
    };
};
Run Code Online (Sandbox Code Playgroud)

我故意通过表单提出错误的请求,这将在我的后端触发错误。这些是通过我的自定义 Express 中间件函数处理的,它看起来像这样(一旦我让这个框架工作,我会添加更多):

  handleOtherError: (error, req, res, next) => { // Final custom error handler, with no …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling middleware express reactjs

2
推荐指数
1
解决办法
2122
查看次数

如何一次在JavaScript映射中设置多个值?

我这里有一条简单的逻辑链,其中bigCities是一个Javascript Map。在此示例中,d表示从csv文件读取的数据数组中的每个对象。对于每个对象的城市属性,我将其分配为d.pop值(城市人口)。

bigCities.set(d.city, +d.pop)

如果我希望能够一次设置多个值怎么办?代码看起来像这样:

bigCities.set(d.city, ["population": +d.pop, "latitude": +d.lat, "longtitude": +d.lng)
Run Code Online (Sandbox Code Playgroud)

是否可以在Javascript映射中创建键值对,其中值是数据数组?如果是这样,我将如何正确编写上面的示例?

javascript arrays getter-setter ecmascript-6

1
推荐指数
2
解决办法
5442
查看次数

用于替换引号的 Sublime 工作流

我使用文本编辑器 Sublime Text 3 来编辑代码,而且我经常会用双引号包裹一个字符串文字,我想将其更改为单引号,反之亦然。现在我滚动到每个引号,并将其替换为我想要的。是否有更快的工作流程?比如说,突出显示单词或热键或其他什么?我会发现它非常有用。

workflow replace double-quotes sublimetext3

1
推荐指数
1
解决办法
2895
查看次数

嵌套Redux Reducer中的解构动作

我正在调度一个看起来像这样的动作:

{ type: "TOGGLE_FARA", fara: true, id: "5d20d019cf42731c8f706db1" }
Run Code Online (Sandbox Code Playgroud)

“ id”仅用于识别正确的用户。该操作旨在修改我的“ fara”状态的“ enabled”属性。我的商店的fara部分如下所示:

{
   fara: {
     enabled: false, // This need to be flipped...
     names: []
   },
   senators: {
      enabled: false,
      names: []
   },
   senateCandidates: {
      enabled: false,
      names: []
   }
}
Run Code Online (Sandbox Code Playgroud)

但是,我不确定如何构造减速器。我只想更改“已启用”属性。我尝试了几种不同的方法:

export default (state = DEFAULT_STATE, action) => {
    switch (action.type) {
      case "INITIALIZE_SETTINGS":
        return {
          fara: action.fara,
          senators: action.senators,
          senateCandidates: action.senateCandidates,
          emails: action.emails
        }
      case "TOGGLE_FARA":
        return {
          ...state,
          // fara['enabled']: action.fara <–– This won't compile...
          // …
Run Code Online (Sandbox Code Playgroud)

javascript state ecmascript-6 reactjs redux

1
推荐指数
1
解决办法
84
查看次数

如何将变量添加到我的 Perl 单行程序中?

我有以下 Perl 单行:

perl -MLingua::EN::Sentence=get_sentences -ne 'print "$_\n" for grep { /replace_me/i } @{get_sentences($_)}' "${filePath}"
Run Code Online (Sandbox Code Playgroud)

我如何重构它,以便我能够用可以作为参数传递到脚本中的任何文本字符串(也称为变量)替换“replace_me”部分?

我知道您不能在单引号内添加变量,但我目前不确定如何使用双引号重新构造它。任何帮助,将不胜感激。

variables scripting perl

1
推荐指数
1
解决办法
71
查看次数

如何将我的 Nginx 实例指向另一个 pod 的 ClusterIP 服务?

我正在尝试配置我的 Kubernetes 应用程序,以便我的前端应用程序可以与我的后端通信,该后端在另一个部署上运行并通过 ClusterIP 服务公开。

目前,前端应用程序通过 Nginx 提供一些静态内容。该服务器的配置位于已安装的配置内。我已经获得了/向用户提供静态内容的路由,并且我想在服务器块中配置另一个路由以指向我的后端,但/api我不确定如何将其定向到我的 ClusterIP 服务其他部署。

完整的前端部署文件如下所示:

apiVersion: v1
kind: ConfigMap
metadata:
  name: nginx-conf
data:
  nginx.conf: |

    ## To make changes to the configuration
    ## You use the kubectl rollout restart nginx command.

    events {}
    http {

      include /etc/nginx/mime.types;
      include /etc/nginx/conf.d/*.conf;
      include /etc/nginx/extra-conf.d/*.conf;

      server {

        listen 80;

        location / {
          root /usr/share/nginx/html;
          index index.html index.htm;
          try_files $uri $uri/ /index.html =404;
        }

        #location /api {
        ##
        ## Send traffic to my API, running …
Run Code Online (Sandbox Code Playgroud)

kubernetes

0
推荐指数
1
解决办法
544
查看次数