小编Dav*_*ord的帖子

可以将create-react-app与TypeScript一起使用

是否可以将TypeScript与create-react-app一起使用?如果是这样,你会怎么做?

reactjs create-react-app

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

JSX属性中的Lambda是反模式吗?

我今天开始使用新的linter(tslint-react),它给了我以下警告:

"由于渲染性能影响,Lambdas在JSX属性中被禁止"

我知道这会导致每个渲染都创建一个新函数.而且它可以触发不需要的重新渲染,因为子组件会认为它的道具已经改变了.

但我的问题是,如何将参数传递给循环内的事件处理程序:

customers.map( c => <Btn onClick={ () => this.deleteCust(c.id) } /> );
Run Code Online (Sandbox Code Playgroud)

reactjs

32
推荐指数
2
解决办法
8428
查看次数

在React中,setState和forceUpdate之间有什么区别

覆盖shouldComponentUpdate 的组件中,forceUpdate和setState之间有什么区别吗?

更新:我已经知道文档说的内容,并且forceUpdate不是推荐的方法.我只是想更深入地了解正在发生的事情.我想知道为什么?我已经知道setState将传递的对象(状态"delta" - 类似于sql update)与当前状态对象合并.

假设一个简单的用例:不需要撤消或时间旅行功能.无需在shouldComponentUpdate中进行指针比较.实际上,根本不需要使用shouldComponentUpdate.

在这种情况下,在我看来,变异状态和调用forceUpdate()是一种使用React的完全有效的方法.从黑匣子的角度来看,这两种技术似乎具有完全相同的效果:

技术#1: this.state.x = 10; this.forceUpdate();

技巧#2: this.state.setState({x:10});

再一次,我已经知道有些人宁愿永远不要改变国家.并使用函数式编程风格.我只是想知道是否有任何技术原因要避免技术#1.或者我错过了什么?

reactjs

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

在 React Material ui 中将应用程序栏停靠到窗口顶部

在 React Material ui 中,如何使应用栏固定,以便在页面其余部分滚动时它保持固定?

reactjs material-ui

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

Flow中的class vs type

在Flow中,为什么要使用类而不是类型?

type Point = {x: number; y: number};
class Point = {x: number; y: number};
Run Code Online (Sandbox Code Playgroud)

flowtype

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

webpack:在html模板中使用哈希文件名

现在,我有了webpack生成名称为带有哈希值的我的捆绑文件:

bundle.649c4c4e6c8076189257.cache.js
Run Code Online (Sandbox Code Playgroud)

我还想出了如何让Webpack使用HtmlWebpackPlugin从html模板生成我的主要html页面。

这是我的问题,在我的html模板中,我的捆绑文件名经过硬编码:

<script src="bundle.649c4c4e6c8076189257.cache.js"></script>
Run Code Online (Sandbox Code Playgroud)

我宁愿有某种变量,像这样:

<script src="${bundleFileName}"></script>
Run Code Online (Sandbox Code Playgroud)

我该如何使用webpack?

webpack

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

Flow中的对象扩展运算符

我想在仅更改单个属性时复制对象.没有Flow,我可以使用对象扩展运算符这样做:

class Point { x: number = 10; y: number = 10; }
const p1 = new Point();
const p2 = {...p1, y: 5};
Run Code Online (Sandbox Code Playgroud)

但是当我向p1和p2添加类型注释时,如下所示:

const p1 = new Point();
const p2 = {...p1, y: 5};
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

 11: const p2:Point = {...p1, y: 5};
                      ^^^^^^^^^^^^^ object literal. This type is incompatible with
 11: const p2:Point = {...p1, y: 5};
          ^^^^^ Point
Run Code Online (Sandbox Code Playgroud)

如何在Flow中以类型安全的方式实现这种类型的操作?

举个例子,在Elm中,我可以这样做:

p2 = { p1 | y = 5 }
Run Code Online (Sandbox Code Playgroud)

Flow中必须有一些等价物.

flowtype

5
推荐指数
3
解决办法
2152
查看次数