小编D P*_*ark的帖子

在 React 中将函数传递给 setState() 有什么好处?

我有一个名为的函数onRemove,其写法如下:

const [todos, setTodos] = useState(todoData);

const onRemove = useCallback(
    (id) => {
      setTodos(todos.filter((todo) => todo.id !== id));
    },
    [todos]
  );
Run Code Online (Sandbox Code Playgroud)

然后我注意到改变它的功能会导致渲染时间缩短。

const onRemove = useCallback(
    (id) => {
      setTodos(todos => todos.filter((todo) => todo.id !== id));
    },
    []
  );
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  1. 为什么它渲染组件的速度更快?
  2. 使用函数式还有哪些其他优点setState()

functional-programming ecmascript-6 reactjs

10
推荐指数
1
解决办法
9484
查看次数

如何在 Deck.gl 中动态切换多个图层?

在此输入图像描述 我正在构建一个基本的可视化系统,可以从控制框切换图层。我将layers各个图层合并为一个。

const [layers, setLayers] = useState([densityLayer, pedestrianLayer]);

我有filterState跟踪控制箱中的活动的功能。它包含图层对象作为属性linkTo

 const [filterState, setFilterState] = useState([
        {
          id: 'densityFilter',
          checked: true,
          description: 'Population density',
          linkedTo: densityLayer
        },
        {
          id: 'pedestrianFilter',      
          checked: true,
          description: 'Pedestrian volume',
          linkedTo: pedestrianLayer
        }
      ]);
Run Code Online (Sandbox Code Playgroud)

每次检查属性filterState更新时,它都会启动renderLayers() ,选择checked属性为的相应图层true

  useEffect(()=>{
        renderLayers();
      },[filterState]);

      const renderLayers = () => {
        const newLayers = []; 
        filterState.map(filter => (filter.checked && newLayers.push(filter.linkedTo)));
        setLayers(newLayers);
      }
Run Code Online (Sandbox Code Playgroud)

然后作为图层道具layers传递给组件。DeckGL

   <DeckGL
        initialViewState={viewState}
        controller={true}
        layers={layers}
      >
Run Code Online (Sandbox Code Playgroud)

在我的程序中,关闭图层效果很好,但它们不会重新打开。在控制台中,我注意到层之间的生命周期是不同的。我的做法有什么不正确的地方吗?

javascript data-visualization ecmascript-6 reactjs deck.gl

5
推荐指数
1
解决办法
3678
查看次数

如何在 Material UI 中动态更改对象中的属性值?

listItemuseStyles外面定义了一个名为in 的属性,TodoListItem如下所示:

const useStyles = makeStyles(theme => ({
        listItem: {
            textDecoration: 'none'
        }
    })
)

const TodoListItem({checked}) => {
    const classes = useStyles();
    return <ListItemText className={classes.listItem} primary={text}/>
};

Run Code Online (Sandbox Code Playgroud)

然后我想textDecoration根据名为 的变量更改状态checked。我尝试直接使用checked变量 inuseStyles但不起作用,因为它超出了范围。

textDecoration: checked ? 'line-through' : 'none'
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我应该如何将checked变量传递useStyles给三元运算符以使其工作?

ecmascript-6 reactjs material-ui

3
推荐指数
1
解决办法
1729
查看次数

array.map() 中大括号的含义

我有一个.map()可以更改数组isActive中对象的属性值的函数data。然而,用大括号包裹它会返回未定义的结果,而用括号包裹它或不包裹它会返回更新后的值。大括号用作箭头函数中的包装器,但它对于 .map() 的工作方式是否有所不同?

    const newData = data.map((data) => {
      data.label === label ? { ...data, isActive: !data.isActive } : data,
    });
    console.log(newData) 
    //undefined



    const newData = data.map((data) => 
      data.label === label ? { ...data, isActive: !data.isActive } : data,
    );
    console.log(newData) 
    //returns updated newData

Run Code Online (Sandbox Code Playgroud)

javascript arrays ecmascript-6

3
推荐指数
1
解决办法
4532
查看次数