Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在React中使用Props变量与传递Prop变量作为参数_Javascript_Reactjs - Fatal编程技术网

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
vs
ComponentCardB
中增加间接层


略微相切,但相关:根据您传递给的对象以及组件是否具有其他道具或状态,您可能希望通过
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} />;
};