这个问题可以通过使用 React Router 的 useParams 钩子来解决。

首先,确保你的路由设置正确,可以根据 discussionIdchannelId 来匹配路由。例如:

<Route path="/discussions/:discussionId/channels/:channelId" component={DiscussionPage} />

然后,在 DiscussionPage 组件中,使用 useParams 钩子来获取当前的 discussionIdchannelId。例如:

import { useParams } from 'react-router-dom';

const DiscussionPage = () => {
  const { discussionId, channelId } = useParams();

  // 根据 discussionId 和 channelId 获取 discussionInfo 和 channels 的逻辑

  return (
    <div>
      {/* 显示 discussionInfo 和 channels */}
    </div>
  );
};

这样,当用户切换 channels 时,discussionInfochannels 不会重新从服务器获取,而是根据新的 channelId 进行更新。

至于滑动的问题,你可以使用 useEffect 钩子来监听 channelId 的变化,并在变化时执行滑动的逻辑。例如:

import { useRef, useEffect } from 'react';

const DiscussionPage = () => {
  const { discussionId, channelId } = useParams();
  const tabsRef = useRef(null);

  useEffect(() => {
    // 执行滑动逻辑,将选中的 tabs 滑动到可视区域
    if (tabsRef.current) {
      tabsRef.current.scrollIntoView({ behavior: 'smooth' });
    }
  }, [channelId]);

  // 根据 discussionId 和 channelId 获取 discussionInfo 和 channels 的逻辑

  return (
    <div>
      <div ref={tabsRef}>
        {/* 显示 tabs */}
      </div>
      <div>
        {/* 显示 discussionInfo */}
      </div>
    </div>
  );
};

这样,每当 channelId 变化时,tabs 就会滑动到选中的位置。

希望这些代码能帮助到你解决问题

reactjs v18 一个page的url为 discussions1channels1 这个page下有一个discussionInfo展示当前discussion的概览信息以及一个 tabs 来展示所有的 channles用户点击channels就会切换 例如:discussions1channels2但是每次切换channels的时候会出现2个情况第一个是 discussionInfo 和

原文地址: https://www.cveoy.top/t/topic/iBcV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录