当Redux存储值更改时,React Tab组件不更新活动选项卡

93ze6v8z  于 2023-06-23  发布在  React
关注(0)|答案(2)|浏览(231)

我正在React应用程序中使用Chakra UI Tab组件。我在Redux中存储了一个数字值,我想根据这个值更改活动选项卡。但是,当我更新存储中的数字值时,活动选项卡不会相应地更改。如何解决此问题?
下面是MyTabs组件的代码:

function MyTabs() {
  const number = useSelector(selectnumber);

  console.log(number);

  return (
    <Tabs defaultIndex={number}>
      <TabPanels>
        <TabPanel>
          <Image boxSize="200px" fit="cover" src="" />
        </TabPanel>
        <TabPanel>
          <Image boxSize="200px" fit="cover" src="" />
        </TabPanel>
      </TabPanels>
      <TabList>
        <Tab>Naruto</Tab>
        <Tab>Sasuke</Tab>
      </TabList>
    </Tabs>
  );
}
zbq4xfa0

zbq4xfa01#

为了确保当Redux中的数字值更改时,Chakra UI Tab组件中的活动选项卡会更新,您可以使用React提供的useEffect钩子。useEffect钩子允许您执行副作用,例如在特定依赖项更改时更新活动选项卡。
您可以按如下方式修改MyTabs组件:

import { useEffect } from 'react';
    import { useSelector, useDispatch } from 'react-redux';
    import { Tabs, TabList, Tab, TabPanels, TabPanel } from '@chakra-ui/react';
    import { selectNumber, updateNumber } from 'path/to/your/redux/slice';
    function MyTabs() {
      const number = useSelector(selectNumber);
      const dispatch = useDispatch();
      useEffect(() => {
        // Update the active tab index in Redux when the number changes
        dispatch(updateNumber(number));
      }, [number, dispatch]);
      return (
        <Tabs defaultIndex={number}>
          <TabPanels>
            <TabPanel>
              <Image boxSize="200px" fit="cover" src="" />
            </TabPanel>
            <TabPanel>
              <Image boxSize="200px" fit="cover" src="" />
            </TabPanel>
          </TabPanels>
          <TabList>
            <Tab>Naruto</Tab>
            <Tab>Sasuke</Tab>
          </TabList>
        </Tabs>
      );
    }**'

在这个更新的代码中,useEffect钩子用于在数字值更改时分派动作(updateNumber)。确保您已经在Redux切片中实现了相应的操作和reducer逻辑(selectNumber)来处理数字更新。
通过这样做,活动选项卡将根据存储在Redux中的数字值自动更新。

eh57zj3b

eh57zj3b2#

defaultIndex prop是:
所选选项卡的初始索引(在非受控模式下)
参见受控和非受控组件和默认值文档:
在React渲染生命周期中,表单元素上的value属性将覆盖DOM中的值。对于不受控制的组件,您通常希望React指定初始值,但不控制后续更新。要处理这种情况,可以指定defaultValue属性而不是value组件挂载后修改defaultValue属性的值不会导致DOM中的值发生任何更新。
您可以使用受控选项卡

const tabIndex = useSelector(selectnumber);
const dispatch = useDispatch();

<Tabs 
  index={tabIndex} 
  onChange={(index) => dispatch({ type: 'SET_TAB_INDEX', payload: { index } })}>
</Tabs>

相关问题