小编Mag*_*nus的帖子

纯函数:“无副作用”是否意味着“在给定相同输入的情况下始终相同的输出”?

定义函数的两个条件pure如下:

  1. 无副作用(即仅允许更改本地范围)
  2. 给定相同的输入,始终返回相同的输出

如果第一个条件始终为真,那么是否有第二次条件不为真?

即真的只有第一个条件才需要吗?

javascript functional-programming language-lawyer pure-function

83
推荐指数
4
解决办法
6507
查看次数

与基于类的方法相比,使用Hooks设置状态后重新渲染时有什么区别?

类组件

在React类组件中,告诉我们setState 总是导致重新渲染,无论状态是否实际更改为新值。实际上,组件重新呈现,当状态更新为同一值以前。

Docs(setState API参考)

除非shouldComponentUpdate()返回false,否则setState()将始终导致重新渲染。


挂钩(功能组件)

但是,使用钩子时,文档将更新状态指定为与先前状态相同的值,不会导致(子组件)重新呈现:

Docs(useState API参考)

摆脱状态更新

如果您将State Hook更新为与当前状态相同的值,React将在不渲染子级或激发效果的情况下纾困。(React使用Object.is比较算法。)


密切相关的问题

  1. this.setState即使新state值与之前的值相同,类中的组件始终会导致重新渲染是否正确?
  2. 在带有钩子的功能组件中,如果值与先前的值不同,setStatefrom useState仅会导致重新渲染是否正确state
  3. 类组件的方法内部进行设置是否statethis.setState带有钩子函数组件的函数内部进行设置相同?renderstate
  4. 以下正确吗?
    • 类组件中,如果我们staterender方法中进行设置,则会发生无限循环。这是因为类组件不在乎新state的与先前的相同state。它只是在每个上不断重新渲染this.setState
    • 但是,在带有钩子函数组件中,state在函数体内进行设置(render类组件中的方法类似,在重新渲染时运行)将不是问题,因为当看到该组件时 …

javascript reactjs react-hooks

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

用汇编语言寻址模式(IA-32 NASM)

由于这方面的网络资源稀少,为了将来的搜索,我将首先列出IA-32汇编语言(NASM)的地址模式,然后跟进一个简单的问题.

  1. 注册寻址
    • mov eax,ebx:将ebx中的内容复制到eax中
    • mov esi,var:将var的地址(比如0x0040120e)复制到esi中
  2. 立即寻址(第二个操作数是立即数)
    • mov bx,20:16位寄存器bx得到实际值20
  3. 直接内存寻址(通过指定地址直接从内存加载)
    • mov ax,[1000h]:从地址4096(十六进制为0x1000)的字节加载一个2字节对象到一个名为'ax'的16位寄存器
    • mov [1000h],ax:地址1000h的内存获取ax的值
  4. 直接偏移寻址(与3相同,仅使用算术来修改地址)
    • mov al,[byte_tbl + 2]
  5. 间接注册(使用存储在寄存器中的地址访问存储器)
    • mov ax,[di]:将di指定的内存地址的值复制到ax中
    • mov dword [eax],var1:将var1中的值复制到eax指定的内存槽中

请注意,以上内容适用于NASM.对于MASM/TASM,您可以使用"mov esi,OFFSET foo"来获取地址,而"mov esi,foo"和"mov esi,[foo]"都将获得该值(对@Michael的信誉).

所以,在我的问题上.它与以下教程第29页底部的示例有关:http://www.tutorialspoint.com/assembly_programming/assembly_tutorial.pdf

它基本上将下面的代码列为间接内存寻址的示例.

MY_TABLE TIMES 10 DW 0 ; Allocates 10 words (2 bytes) each initialized to 0 
MOV EBX, [MY_TABLE] ; Effective Address of MY_TABLE in EBX 
MOV [EBX], 110 ; MY_TABLE[0] = 110 
ADD EBX, 2 ; EBX = EBX +2 
MOV [EBX], 123 ; MY_TABLE[1] …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm addressing-mode

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

Webpack style-loader / css-loader: url() 路径解析不起作用

有一些关于style-loaderand 的SO 帖子css-loader,但尽管如此,我还是无法找到解决我的问题的方法。

简而言之,当我@import css在其他css文件中归档时,导入的css包含url()具有相对路径的 s 时,路径解析不正确。

基本上,错误消息表明 Webpack 最终认为url()导入的 css 中的路径是相对于src(主入口点),而不是相对于css它导入的文件:

// css-one.scss
@import "./assets/open-iconic-master/font/css/open-iconic-bootstrap.css";

// open-iconic-bootstrap.css
@font-face {
    src: url('../fonts/open-iconic.eot');
}
Run Code Online (Sandbox Code Playgroud)

错误:

./src/main.scss 中的错误 (./node_modules/css-loader??ref--5-1!./node_modules/postcss-loader/src??ref--5-2!./node_modules/sass- loader/lib/loader.js??ref--5-3!./src/main.scss)

模块未找到:错误:无法解析'../fonts/open-iconic.eot''C:\用户\ ... \ src'中 @ ./src/main.scss (./node_modules/css- loader??ref--5-1!./node_modules/postcss-loader/src??ref--5-2!./node_modules/sass-loader/lib/loader.js??ref--5-3! ./src/main.scss) 7:106-141 7:172-207 @ ./src/main.scss @ ./src/index.js

我试过的:

我的 Webpack 配置文件(加载程序在底部):

javascript css webpack webpack-style-loader css-loader

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

React with Hooks:什么时候重新渲染?

什么时候使用钩子的 React 组件会重新渲染?

让我们假设组件:

  • 管理状态 useState
  • props从其父级接收

是否会在以下事件之后直接重新渲染,并且在这些时间点发生?

  • 组件接收新 props
  • state 已更新

相关问题

让我们假设组件有多个useState表达式,并且用户交互会导致多个状态更新。

组件会重新渲染多次,每个state更改的值一次,还是将这些相关的更改批处理为一次重新渲染?

javascript reactjs react-hooks

9
推荐指数
2
解决办法
2389
查看次数

C#中DLL与命名空间的关系

这里的高级问题:

今天我花了很多时间在基础高级概念上进行自我教育,例如API,静态和动态库,DLL和C#中的编组.获得所有这些知识使我看起来像一个非常基本的问题,并且可能在我对这些概念的理解中表现出一个漏洞:

我知道的:

  • DLL可能包含类,而这些类又包含各种类成员,例如方法和字段,其中一些我可能希望在我的程序中使用
  • 在C#中,我们在代码顶部使用关键字"using"来定义我们想要包含在程序中的命名空间

我得不到的:

我的印象是实际的方法是在DLL中定义的.当我给出的所有函数都是命名空间时,我的程序如何找到DLL中定义的实际函数?在顶部"使用XYZ.dll"而不是"使用XYZ_namespace"对我来说似乎更直观.

非常感谢帮助我填补这里的空白.

编辑:修改后的帖子特定于C#.

编辑2:对于其他想知道他们的C#应用​​程序如何通过"使用namespaceX"实际获得类型的人来说,这是一个很好的资源(除了下面的有用帖子):http://broadcast.oreilly. com/2010/07/understanding-c-namespaces-and.html.

基本上,您要使用的类型驻留在库中,您必须将Visual Studio设置为引用这些库,以便在代码中"使用"其命名空间.

.net c# dll

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

覆盖npm包依赖项

我读到这个:如何覆盖嵌套的NPM依赖版本?

不幸的是,它并没有解决我的问题.

我正在尝试将包更改为使用特定依赖项来使用该依赖项的其他版本.

它是否构建在一个包中应该使用哪个版本的依赖项,或者是否可以更改它?

在我的具体情况下,我试图改变(最新)css-loader的默认依赖,而不是依赖(下一个).cssnano@3.10.0cssnano@4.0.0-rc.2

从上面链接的第二个答案中,用户trickpatty指出:

这将在你运行npm i时删除,而不是编辑你的package-lock.json并将子依赖项添加到那里的"依赖项",将子依赖项添加到你的package.json"dependencies"部分

包含cssnano@4.0.0-rc.2在package.json中的devDependencies没有任何作用css-loader.它仍然使用其他(默认)版本cssnano.

javascript npm webpack package.json

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

React Context:什么时候重新渲染儿童?

另一StackOverflow上后,谢霆锋让我了解到,一个Context.Provider重新呈现其子Context.Consumer组件时的上下文值Provider规定变化。

官方文件进一步证实了这一点:

每当 Provider 的 value 属性发生变化时,所有作为 Provider 后代的消费者都会重新渲染。

Nicholas 还帮助我理解了 a Providerwill 知道上下文值是否发生变化的唯一方法,是它的封闭组件是否重新渲染。

总之:

  1. ProvidersConsumers每当上下文值更改时更新它
  2. 这只会在Provider重新渲染周围的封闭函数时发生
  3. Provider无论如何,这会导致及其所有后代重新渲染

因此,上面(1)中的特征似乎是多余的。如果ProviderConsumers在其封闭组件重新渲染时才更新,并且仅在父级重新渲染时发现上下文值更新,则不需要具有允许在上下文值更改时Provider更新的功能。Consumers

我在这里缺少什么?


编辑

尼古拉斯还在评论中说:

由于与通过上下文提供的价值无关的事情,应用程序可以(可以想象)重新渲染。如果发生这种情况,您不希望消费者重新渲染。为此,您需要之前的值和之后的值才能通过 === 检查。如果您提供一个对象,这意味着您不能在 App 的 render 方法中创建一个全新的对象,否则最终会不必要地重新渲染消费者。

但是,我的印象是,当父级重新渲染时,其所有子级也将重新渲染。因此,===上面提到的检查无济于事,即孩子们无论如何都会重新渲染。

javascript reactjs

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

JavaScript:箭头功能与毁灭?

MDN上,以下代码用作如何使用箭头函数编写较短函数的示例.

var materials = [
  'Hydrogen',
  'Helium',
  'Lithium',
  'Beryllium'
];

materials.map(function(material) { 
  return material.length; 
}); // [8, 6, 7, 9]

materials.map((material) => {
  return material.length;
}); // [8, 6, 7, 9]

materials.map(({length}) => length); // [8, 6, 7, 9]
Run Code Online (Sandbox Code Playgroud)

我先了解这两个.最后一个函数究竟发生了什么?

它是一个ES6对象解构赋值(即当一个物质String对象作为参数从map接收时,该字符串的长度属性被解构为长度变量,然后由箭头函数返回)?

javascript ecmascript-6 arrow-functions

7
推荐指数
2
解决办法
1980
查看次数

CSS 网格:网格行/列开始/结束 VS 网格区域 + 网格模板区域

我一直在阅读CSS Tricks 上的CSS 网格教程,但一个基本方面让我有点困惑。

似乎有两种方法可以确定网格项跨越多少个单元格:

  1. grid-template-areagrid-area使用为具有属性的网格项指定的名称
  2. 使用grid-column-start/endgrid-row-start/end

看看下面的测试代码,似乎 的大小grid items是按以下顺序决定的(其中左侧的值覆盖右侧的值):

grid-row/column-start/end>>grid-template-area物品本身的尺寸

问题

  1. 我的上述顺序通常是正确的吗?
  2. 是否有指定大小grid items(即它们跨越多少个单元格)的首选方法(上面的 1 或 2)?

代码

.container {
  display: grid;
  border: 1px solid green;
  grid-template-columns: 120px 120px 120px;
  grid-template-rows: 120px 120px 120px;
  grid-template-areas: "item-1 item-1 item-2" "item-3 item-4 item-4" "item-5 item-6 .";
}

.item-1 {
  border: 1px solid blue !important;
  grid-area: item-1;
  grid-column-start: 1;
  grid-column-end: 4;
  grid-row-start: 1;
  grid-row-end: 1;
}

.item-2 { …
Run Code Online (Sandbox Code Playgroud)

html css css-grid

7
推荐指数
2
解决办法
2800
查看次数