当前位置:首页 > React

基于react框架页面如何传递参数

2026-01-26 03:33:24React

路由传参(React Router)

在React Router中,可以通过useParamsuseSearchParams传递参数。URL路径参数适用于固定结构的参数,查询参数适用于可选或动态参数。

安装React Router:

npm install react-router-dom

路径参数示例:

// 路由配置
<Route path="/user/:id" element={<UserPage />} />

// 组件内获取
import { useParams } from 'react-router-dom';
function UserPage() {
  const { id } = useParams();
  return <div>User ID: {id}</div>;
}

查询参数示例:

// 跳转时传递
navigate(`/search?query=${term}`);

// 组件内获取
import { useSearchParams } from 'react-router-dom';
function SearchPage() {
  const [searchParams] = useSearchParams();
  const query = searchParams.get('query');
  return <div>Search: {query}</div>;
}

状态提升(父子组件)

父组件通过props向子组件传递参数,适用于有直接层级关系的组件。

父组件:

function Parent() {
  const [count, setCount] = useState(0);
  return <Child count={count} />;
}

子组件:

function Child({ count }) {
  return <div>Count: {count}</div>;
}

Context API跨组件传参

使用React的Context API实现跨层级组件传参,避免props逐层传递。

创建Context:

const UserContext = createContext();

function App() {
  const [user, setUser] = useState(null);
  return (
    <UserContext.Provider value={{ user, setUser }}>
      <ChildComponent />
    </UserContext.Provider>
  );
}

消费Context:

function ChildComponent() {
  const { user } = useContext(UserContext);
  return <div>User: {user?.name}</div>;
}

状态管理库(Redux/Zustand)

通过全局状态管理库传递参数,适合复杂应用的状态共享。

Redux示例:

// 定义slice
const userSlice = createSlice({
  name: 'user',
  initialState: { name: '' },
  reducers: {
    updateName: (state, action) => {
      state.name = action.payload;
    }
  }
});

// 组件中使用
function UserProfile() {
  const name = useSelector(state => state.user.name);
  const dispatch = useDispatch();
  return (
    <input 
      value={name}
      onChange={e => dispatch(updateName(e.target.value))}
    />
  );
}

Zustand示例:

// 创建store
const useStore = create(set => ({
  count: 0,
  increment: () => set(state => ({ count: state.count + 1 }))
}));

// 组件中使用
function Counter() {
  const { count, increment } = useStore();
  return <button onClick={increment}>{count}</button>;
}

事件总线(Event Emitter)

通过自定义事件实现任意组件间的通信,适合解耦的组件关系。

创建事件总线:

const events = new EventEmitter();

// 发布事件
function ComponentA() {
  const emitData = () => {
    events.emit('data', { value: 123 });
  };
  return <button onClick={emitData}>Send</button>;
}

// 订阅事件
function ComponentB() {
  const [data, setData] = useState(null);
  useEffect(() => {
    events.on('data', setData);
    return () => events.off('data', setData);
  }, []);
  return <div>Received: {data?.value}</div>;
}

URL传参(非路由场景)

通过window.location或URLSearchParams处理非路由场景的URL参数。

设置URL参数:

function updateQueryParam(key, value) {
  const params = new URLSearchParams(window.location.search);
  params.set(key, value);
  window.history.pushState({}, '', `?${params.toString()}`);
}

读取URL参数:

function getQueryParam(key) {
  const params = new URLSearchParams(window.location.search);
  return params.get(key);
}

浏览器存储

利用localStorage或sessionStorage实现参数持久化。

存储数据:

localStorage.setItem('theme', 'dark');

读取数据:

const theme = localStorage.getItem('theme');

组合式传参

复杂场景可以组合多种传参方式,例如路由参数+Context API:

基于react框架页面如何传递参数

function App() {
  const { id } = useParams();
  const [user, setUser] = useState(null);

  useEffect(() => {
    fetchUser(id).then(setUser);
  }, [id]);

  return (
    <UserContext.Provider value={user}>
      <UserProfile />
    </UserContext.Provider>
  );
}

标签: 框架参数
分享给朋友:

相关文章

vue框架实现项目

vue框架实现项目

Vue框架实现项目的核心步骤 环境准备与项目初始化 确保Node.js和npm/yarn已安装,使用Vue CLI或Vite创建项目: npm init vue@latest # Vue CLI…

vue框架实现的思想

vue框架实现的思想

Vue 框架的核心思想 Vue 的核心思想是数据驱动视图和组件化开发,通过简洁的 API 和响应式系统,实现高效的前端开发体验。 响应式数据绑定 Vue 采用基于 Object.defineProp…

vue框架实现日期显示

vue框架实现日期显示

实现日期显示的基本方法 在Vue中显示日期可以通过多种方式实现,以下是几种常见的方法: 使用JavaScript的Date对象 直接通过JavaScript的Date对象获取当前日期并显示: &l…

react如何管理全局参数

react如何管理全局参数

使用Context API管理全局参数 Context API是React内置的全局状态管理方案,适合跨组件共享数据。通过React.createContext创建上下文,配合Provider和use…

react dva如何获取参数

react dva如何获取参数

在 React Dva 中获取参数的方法 通过路由参数获取 在 Dva 中,路由参数可以通过 props.match.params 获取。假设路由配置中定义了参数 id: // router.js…

如何直接使用react框架

如何直接使用react框架

安装 React 项目 使用官方工具 create-react-app 快速初始化项目。确保已安装 Node.js(建议版本 14+),在终端运行以下命令: npx create-react-app…