小编Thi*_*man的帖子

检测React组件外部的单击

我正在寻找一种方法来检测是否在组件外发生了单击事件,如本文所述.jQuery nearest()用于查看click事件中的目标是否具有dom元素作为其父元素之一.如果匹配,则click事件属于其中一个子项,因此不被视为在组件之外.

所以在我的组件中,我想将一个单击处理程序附加到窗口.当处理程序触发时,我需要将目标与我的组件的dom子项进行比较.

click事件包含"path"之类的属性,它似乎保存了事件所经过的dom路径.我不确定要比较什么或如何最好地遍历它,我认为有人必须已经把它放在一个聪明的实用功能中......不是吗?

javascript dom reactjs

315
推荐指数
20
解决办法
21万
查看次数

不要在循环中创建函数

在这种情况下解决jslint错误的正确方法是什么?我正在为使用它的对象添加一个getter函数.如果不在循环内创建函数,我不知道如何做到这一点.

for (var i = 0; i<processorList.length; ++i) {
   result[i] = {
       processor_: timestampsToDateTime(processorList[i]),
       name_: processorList[i].processorName,
       getLabel: function() { // TODO solve function in loop.
            return this.name_;
       }
   };
}
Run Code Online (Sandbox Code Playgroud)

javascript jslint

68
推荐指数
1
解决办法
6万
查看次数

Bash脚本需要sudo密码

我正在创建一个Bash安装程序脚本,它为OSX和Linux编译和安装一些库.因为我的脚本中的一些命令("make install","apt-get install","port install"等)需要sudo,我需要用户提供密码.

目前,只要第一个sudo命令即将执行,就会要求用户输入密码,但由于这通常是在编译阶段之后,因此在启动脚本和输入密码之间总会有一段时间.

我想在脚本的开头放入密码输入+检查.另外,我很好奇这是否真的是一种安装系统库的好方法.

或者我可以在不需要sudo的本地沙箱位置安装库,但是我必须告诉apt-get和macports安装他们的库以外的默认值/ usr/local /和/ opt/local ,我不知道该怎么做,也不知道这是一个聪明的想法.

bash sudo

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

使用install_name_tool出了什么问题?

我正在尝试在构建之后更改dylib的安装路径.我otool -L用来检查当前路径是什么.然后我做:

$ install_name_tool -change /my/current/path/libmine.dylib \
    /my/new/path/libmine.dylib libmine.dylib
Run Code Online (Sandbox Code Playgroud)

我没有收到错误,但没有任何变化.如果我再次检查路径,旧路径仍在那里.此外,新路径比旧路径要短得多,所以没有问题,我认为lib甚至可以使用额外的标志进行编译,以获得更多的文件路径空间.

有任何想法吗?

macos install-name-tool

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

在React中使用不可变状态有什么缺点?

我已经使用有状态存储以"正常"方式构建了我的第一个React应用程序,现在我正在研究使用Este starterkit中使用的不可变全局状态.

  • 所有商店的状态保存在一个不可变的数据结构中
  • 组件没有状态,但基于商店getter函数访问render()中的数据
  • 商店也是无状态的,但使用游标改变其域的全局应用程序状态.
  • 顶级应用程序组件侦听状态更改,并重新呈现整个组件树.
  • 组件被实现为"纯粹"意味着他们使用shouldComponentUpdate来有效地计算出它们在重新渲染中可以被跳过.

它以几种方式简化了应用程序结构:

  • 组件不会侦听存储,也不会将存储数据复制到本地状态.他们只是在每个渲染上抓住他们的商店状态.
  • 全局状态始终是整个应用程序的快照,使调试和添加撤消功能更容易.
  • 全局状态似乎简化了同构渲染.

我只读了关于在React中使用不可变数据的积极的事情,建议避免组件中的状态,所以我想知道是否有任何缺点.我想一定有,因为否则我不明白为什么它不推荐,因为构建应用程序做出反应的方式.

不变性对我来说是新的,所以如果我在一个复杂的真实应用程序中开始使用这种方法,我应该注意一些警告吗?

我能想到的唯一一件小事是在Este使用它时使用forceUpdate(),因为我已经读过它是一个同步函数.例如,Morearty似乎将更新推迟到下一个动画帧以便批量处理它们,但我认为这是一个实现细节/优化,而不是一些继承的不可变单态方法的缺点.

javascript immutability reactjs immutable.js

23
推荐指数
2
解决办法
4545
查看次数

如何将socket.io与webpack-hot-middleware一起使用?

我有一个Koa服务器使用webpack-dev-middleware和webpack-hot-middleware做热模块替换(HMR),所以中间件使用websocket将更改推送到客户端.

但是我的应用程序代码也需要在客户端和Koa服务器之间拥有自己的websocket连接.我不知道如何实现这一目标?似乎这两者是相互矛盾的.我能和他们并排吗?

我的服务器代码看起来像这样

const compiler = webpack(webpackConfig)
const app = new Koa()

app.use(webpackDevMiddleware(compiler, {
  quiet: true,
  noInfo: true
  stats: {
    colors: true,
    reasons: true
  }
})))

app.use(webpackHotMiddleware(compiler))

const server = require('http').createServer(app.callback())
const io = require('socket.io')(server)
io.on('connection', function() { console.log('socket connection!!') })
Run Code Online (Sandbox Code Playgroud)

和我的客户一样

import Client from 'socket.io-client'
const io = Client()
io.on('connection', (socket) => {
  console.log('+++ io connected! ++++')
  io.on('disconnect', () => { console.log('disconnected', socket) })
})
Run Code Online (Sandbox Code Playgroud)

HMR套接字工作正常,但另一个正在尝试与之交谈 GET /socket.io/?EIO=3&transport=polling&t=1446911862461-0并且这些请求失败.

如何创建不与HMR套接字冲突的websocket?

node.js express socket.io koa webpack

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

如何使用firebase-admin为NodeJ设置timestampsInSnapshots设置?

由于有关Firestore中即将发生的时间戳行为更改的警告,我正在尝试更改应用程序的初始化代码.

存储在Firestore中的Date对象的行为将发生变化,您的应用程序可能会发生变化.要隐藏此警告并确保您的应用不会中断,您需要在调用任何其他Cloud Firestore方法之前将以下代码添加到您的应用中:

const firestore = firebase.firestore(); const settings = {/ your settings .../timestampsInSnapshots:true}; firestore.settings(设置);

通过此更改,存储在Cloud Firestore中的时间戳将作为Firebase Timestamp对象而不是系统Date对象读回.

我找不到任何对firestore"settings"的引用.会这样的吗?Typescript定义说没有......

import * as admin from "firebase-admin";

export const adminApp = admin.initializeApp();

const firestore = admin.firestore(adminApp);
firestore.settings({ timestampsInSnapshots: true });
Run Code Online (Sandbox Code Playgroud)

node.js firebase google-cloud-firestore

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

枚举类型未在运行时定义

我有一个问题,Typescript编译器成功编译我的代码,但运行时给了我未定义的类型错误.

在我的应用中,我创建了一个types.ts文件,其中包含多个其他ts文件之间共享的内容 它包含一个字符串枚举,如:

enum MyEnum {
  One = "one";
  Two = "two";
}
Run Code Online (Sandbox Code Playgroud)

当我这样定义它.编译器让我在其他ts文件中使用它,看起来很开心.但是,在运行时我收到错误"MyEnum未定义".

我知道有两种方法可以解决这个问题:

  1. 在文件中定义枚举使用它.但我不认为这会解决其他想要使用它的文件.
  2. 在types.ts文件中使用"export",并在每个使用它的地方显式导入.

我对Typescript很新,我觉得我可能误解了一些基本的东西.

首先,我不明白为什么如果会出现运行时错误,Typescript编译器会愉快地编译我的代码.我会理解它,如果我使用了declare关键字,告诉编译器在运行时应该有什么东西可用,但在这种情况下我不明白为什么它应该假设枚举来自除了types.ts文件以外的任何地方.

其次,我想在我的应用程序中全局定义类型,并让它们在任何地方都可用,而不必在每次使用它们时都导入它们.我该如何做到这一点?或者这可能被认为是不好的做法?

我使用的是Typescript 2.6,我的配置如下所示:

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es6",
    "module": "commonjs",
    "lib": ["es6", "es7", "esnext"],

    "sourceMap": true /* Generates corresponding '.map' file. */,
    "outDir": "build" /* Redirect output structure to the directory. */,
    "removeComments": true /* Do not emit comments to output. */,

    /* Strict Type-Checking Options */
    "strict": true /* Enable …
Run Code Online (Sandbox Code Playgroud)

typescript

20
推荐指数
5
解决办法
1万
查看次数

如何使用RxJs distinctUntilChanged?

我开始使用RxJs(使用v5测试版),但不知怎的,我无法弄清楚如何使用它distinctUntilChanged.如果我在babel-node中运行它,下面代码的输出是

[ 'a', 1 ]
{ key: 'a', state: 1 }
Next:  { value: 42 }
Completed
Run Code Online (Sandbox Code Playgroud)

这不是我所期望的.为什么只有一个条目通过distinctUntilChanged?我希望输出是

[ 'a', 1 ]
[ 'a', 0 ]
[ 'a', 1 ]
{ key: 'a', state: 1 }
{ key: 'a', state: 2 }
{ key: 'a', state: 0 }
{ key: 'a', state: 1 }
Next:  { value: 42 }
Next:  { value: 24 }
Completed
Run Code Online (Sandbox Code Playgroud)

这是代码

import {Observable} from 'rxjs'

Observable.of(['a', 1], ['a', 1], ['a', 0], …
Run Code Online (Sandbox Code Playgroud)

javascript rxjs rxjs5

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

使用4x4矩阵变换3D平面

我有一个由几个三角形组成的形状,它位于世界空间的某个地方,有刻度,旋转,平移.我还有一个平面,我想在其上投影(正交)形状.

我可以将形状中每个三角形的每个顶点与对象变换矩阵相乘,以找出它在世界坐标中的位置,然后将此点投影到平面上.

但我不需要绘制投影,而是想用形状的逆变换矩阵变换平面,然后将所有顶点投影到(逆变换)平面上.因为它只需要我一次变换平面而不是每个顶点.

我的飞机有一个法线(xyz)和一个距离(d).如何将它与4x4变换矩阵相乘以使其结果正常?

你能创建一个vec4作为xyzd并乘以它吗?或者可能创建一个向量xyz1然后再用d做什么?

3d transform plane

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