是否可以将TypeScript与create-react-app一起使用?如果是这样,你会怎么做?
我今天开始使用新的linter(tslint-react),它给了我以下警告:
"由于渲染性能影响,Lambdas在JSX属性中被禁止"
我知道这会导致每个渲染都创建一个新函数.而且它可以触发不需要的重新渲染,因为子组件会认为它的道具已经改变了.
但我的问题是,如何将参数传递给循环内的事件处理程序:
customers.map( c => <Btn onClick={ () => this.deleteCust(c.id) } /> );
Run Code Online (Sandbox Code Playgroud) 在不覆盖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.或者我错过了什么?
在 React Material ui 中,如何使应用栏固定,以便在页面其余部分滚动时它保持固定?
在Flow中,为什么要使用类而不是类型?
type Point = {x: number; y: number};
class Point = {x: number; y: number};
Run Code Online (Sandbox Code Playgroud) 现在,我有了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?
我想在仅更改单个属性时复制对象.没有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中必须有一些等价物.