“选项卡”不支持在受控模式(通过使用“选定索引”)和非受控模式之间切换



我正在尝试在我的下一个/反应应用程序中使用 react-tab 实现一些选项卡。

我有主页project/:id,它总是在 0 索引选项卡中打开,选择每个选项卡时,选项卡名称将添加到路由中,例如:project/:id/one-tab .

这样,如果我project/:id/two-tab共享链接,则站点将在 1 索引选项卡中打开。

但是我收到错误

react-dom.development.js:20312 Uncaught Error: Switching between controlled mode (by using选中索引) and uncontrolled mode is not supported in选项卡. at Function.copyPropsToState (Tabs.js:65) at getDerivedStateFromProps (Tabs.js:50)

我的组件看起来像这样

   class Project extends React.Component {
       constructor(props) {
          super(props);
          resetIdCounter();
       }
   state = {
     tabIndex: null
   };
   static async getInitialProps({ query }) {
      return { query };
   }
 render() {
    const { query } = this.props;
    const { tabIndex } = this.state;
    const TAB = {
      tab1: 0,
      tab2: 1,
    };
     return (
            <div>
              <Tabs
                selectedIndex={tabIndex || TAB[query.tab]}
                onSelect={index => this.setState({ tabIndex: index })}
              >
                <StyledTabList>
                  <StyledTab
                    onClick={() =>
                      Router.replaceRoute("one-tab", { id })
                    }
                  >
                    One tab
                  </StyledTab>
                  <StyledTab
                    onClick={() => Router.replaceRoute("two-tab", { id })}
                  >
                    Two tab
                  </StyledTab>    
                </StyledTabList>
              </Tabs>
            </div>
      );
   }
 }
 export default Project;
我在

使用此库时遇到了同样的错误。我能够通过确保传递给 selectedIndex prop 的值在 return 函数之前定义(而不是 undefinednull(来解决它。

所以改变这个:

const TAB = {
      tab1: 0,
      tab2: 1,
    };
return (
            <div>
              <Tabs
                selectedIndex={tabIndex || TAB[query.tab]}
                onSelect={index => this.setState({ tabIndex: index })}
              >

进入这个:

const TAB = {
      tab1: 0,
      tab2: 1,
    };
const selectedIdx = tabIndex ? tabIndex : TAB[query.tab]
return (
            <div>
              <Tabs
                selectedIndex={selectedIdx}
                onSelect={index => this.setState({ tabIndex: index })}
              >

编辑:您也可以只在构造函数中设置state.tabIndex = 0,因为 0 索引选项卡是默认选项卡。

相关内容

  • 没有找到相关文章