Javascript 在React中使用Props变量与传递Prop变量作为参数
就编写组件而言,在组件下面编写组件的首选方式是什么?假设Javascript 在React中使用Props变量与传递Prop变量作为参数,javascript,reactjs,Javascript,Reactjs,就编写组件而言,在组件下面编写组件的首选方式是什么?假设removeCard超出了显示的范围,即redux操作 我的假设是,ComponentCardB将是,因为它避免了传递不必要的参数,而该参数无论如何都会在范围内。我想,就总体方案的性能而言,差异可以忽略不计,只是对最佳实践的质疑 短暂性脑缺血发作 const ComponentCardA=(id)=>{ 常量handleRemove=(cardd)=>{ 移除卡(cardId); }; handleRemove(id)}/>; }; 常量组
removeCard
超出了显示的范围,即redux操作
我的假设是,ComponentCardB
将是,因为它避免了传递不必要的参数,而该参数无论如何都会在范围内。我想,就总体方案的性能而言,差异可以忽略不计,只是对最佳实践的质疑
短暂性脑缺血发作
const ComponentCardA=(id)=>{
常量handleRemove=(cardd)=>{
移除卡(cardId);
};
handleRemove(id)}/>;
};
常量组件CARDB=(id)=>{
常量handleRemove=()=>{
移除卡片(id);
};
;
};
第二个选项是更好的方法,因为在渲染中使用箭头函数会在每次组件渲染时创建一个新函数,这可能会破坏基于严格标识比较的优化
另外,如果您不想将语法与props.id一起使用,您可以创建带有对象作为参数的函数组件:
const Component=({id})=>{/*…*/}
当然,也允许使用箭头函数,但请记住,当您不必使用箭头函数时,就不要使用箭头函数。第二个选项是更好的方法,因为在渲染中使用箭头函数会在每次组件渲染时创建一个新函数,这可能会破坏基于严格标识比较的优化 另外,如果您不想将语法与props.id一起使用,您可以创建带有对象作为参数的函数组件:
const Component=({id})=>{/*…*/}
当然,也允许使用箭头功能,但请记住,当您不必使用箭头功能时,就不要使用箭头功能。对于这样的功能组件,是的,没有理由在
ComponentCardA
与ComponentCardB
中增加间接层
略微相切,但相关:根据您传递给的对象以及组件是否具有其他道具或状态,您可能希望通过
useCallback
或useMemo
记忆handleRemove
。原因是,如果其他道具或状态发生更改,您的组件函数将再次被调用,并且(使用现有代码)将创建一个新的handleRemove
函数并将其传递给子级。这意味着必须更新或重新呈现子对象。如果更改与id
无关,则不需要更新/重新提交
但是,如果组件只有
id
而没有其他道具,那么就没有意义了,如果它只是将其传递给HTML元素(与React组件相反),那么可能也没有意义,因为更新该元素的点击处理程序是一个非常有效的操作。对于这样的功能组件,是的,没有理由在ComponentCardA
vsComponentCardB
中增加间接层
略微相切,但相关:根据您传递给的对象以及组件是否具有其他道具或状态,您可能希望通过useCallback
或useMemo
记忆handleRemove
。原因是,如果其他道具或状态发生更改,您的组件函数将再次被调用,并且(使用现有代码)将创建一个新的handleRemove
函数并将其传递给子级。这意味着必须更新或重新呈现子对象。如果更改与id
无关,则不需要更新/重新提交
但是,如果组件只有id
而没有其他道具,那么就没有意义了,如果它只是将其传递给HTML元素(与React组件相反),那么也可能没有意义,因为更新该元素的点击处理程序是一个非常有效的操作。在这两种情况下,都是({id})=>
而不是(id)=>
。您的组件接收到一个具有属性的对象。是的,您是对的,谢谢!在这两种情况下,它都是({id})=>
,而不是(id)=>
。您的组件接收到一个具有属性的对象。是的,您是对的,谢谢!“…因为在渲染中使用箭头函数会在组件每次渲染时创建一个新函数,这可能会破坏基于严格身份比较的优化…”OP的代码创建handleRemove
的频率与创建箭头函数的频率相同,因此,与handleRemove
(尽管handleRemove
更容易被记忆)相比,arrow函数的情况并非如此。在这种情况下,您是对的,因为这是一个简单的示例,但在具有更多函数的更大组件中,它可以产生不同:)“…因为在渲染中使用箭头函数会在每次组件渲染时创建一个新函数,这可能会破坏基于严格标识比较的优化…”。。。“OP的代码创建handleRemove
的频率与创建arrow函数的频率相同,因此arrow函数的频率并不比handleRemove
更高(尽管handleRemove
更容易被记忆)。在这种情况下,您是对的,因为这是一个简单的示例,但是在一个功能更大的组件中,它可以起到不同的作用:)好的,谢谢,对我来说很有意义。重新。回忆录-还没有遇到过这个,所以我会去虫洞…好的,谢谢,对我来说很有意义。重新。回忆录-没有遇到过这样的问题,所以将头向下那个虫洞。。。
const ComponentCardA = (id) => {
const handleRemove = (cardId) => {
removeCard(cardId);
};
<div onClick={() => handleRemove(id)} />;
};
const ComponentCardB = (id) => {
const handleRemove = () => {
removeCard(id);
};
<div onClick={handleRemove} />;
};