当前位置:首页 > React

react中用hooks组件如何传参

2026-01-25 21:40:13React

使用 Props 传递参数

在 React 中,无论是类组件还是函数组件,都可以通过 props 传递参数。Hooks 组件(函数组件)通过函数参数接收 props。

// 父组件
const ParentComponent = () => {
  const message = "Hello from parent";
  return <ChildComponent message={message} />;
};

// 子组件
const ChildComponent = ({ message }) => {
  return <div>{message}</div>;
};

使用 Context API 跨层级传参

对于需要跨多层组件传递的参数,可以使用 React 的 Context API 结合 useContext Hook。

// 创建 Context
const MessageContext = React.createContext();

// 父组件
const ParentComponent = () => {
  const message = "Hello from context";
  return (
    <MessageContext.Provider value={message}>
      <ChildComponent />
    </MessageContext.Provider>
  );
};

// 子组件
const ChildComponent = () => {
  const message = useContext(MessageContext);
  return <div>{message}</div>;
};

使用自定义 Hook 封装逻辑

对于需要复用的逻辑和参数,可以封装成自定义 Hook,然后在多个组件中调用。

react中用hooks组件如何传参

// 自定义 Hook
const useMessage = (initialMessage) => {
  const [message, setMessage] = useState(initialMessage);
  const updateMessage = (newMessage) => setMessage(newMessage);
  return { message, updateMessage };
};

// 组件中使用
const ChildComponent = () => {
  const { message } = useMessage("Default message");
  return <div>{message}</div>;
};

通过回调函数传递参数

父组件可以通过回调函数接收子组件传递的参数。

// 父组件
const ParentComponent = () => {
  const handleMessage = (msg) => console.log(msg);
  return <ChildComponent onMessage={handleMessage} />;
};

// 子组件
const ChildComponent = ({ onMessage }) => {
  const message = "Hello from child";
  return <button onClick={() => onMessage(message)}>Send Message</button>;
};

使用 useReducer 管理复杂状态

对于需要多个参数的复杂状态,可以使用 useReducer Hook。

react中用hooks组件如何传参

// 定义 reducer
const messageReducer = (state, action) => {
  switch (action.type) {
    case "UPDATE":
      return { ...state, message: action.payload };
    default:
      return state;
  }
};

// 父组件
const ParentComponent = () => {
  const [state, dispatch] = useReducer(messageReducer, { message: "Initial" });
  return <ChildComponent dispatch={dispatch} />;
};

// 子组件
const ChildComponent = ({ dispatch }) => {
  const updateMessage = () => dispatch({ type: "UPDATE", payload: "Updated" });
  return <button onClick={updateMessage}>Update Message</button>;
};

使用 Refs 传递可变值

通过 useRef 可以传递可变值,且不会触发重新渲染。

// 父组件
const ParentComponent = () => {
  const messageRef = useRef("Hello from ref");
  return <ChildComponent messageRef={messageRef} />;
};

// 子组件
const ChildComponent = ({ messageRef }) => {
  return <div>{messageRef.current}</div>;
};

通过路由参数传递

在使用 React Router 时,可以通过路由参数传递数据。

// 路由配置
<Route path="/message/:message" component={ChildComponent} />

// 父组件导航
const ParentComponent = () => {
  const history = useHistory();
  const navigate = () => history.push("/message/Hello%20from%20route");
  return <button onClick={navigate}>Navigate</button>;
};

// 子组件获取参数
const ChildComponent = () => {
  const { message } = useParams();
  return <div>{decodeURIComponent(message)}</div>;
};

以上方法涵盖了 React Hooks 组件中常见的参数传递场景,可以根据具体需求选择合适的方式。

标签: 中用组件
分享给朋友:

相关文章

uniapp组件

uniapp组件

uniapp组件基础概念 uniapp的组件系统基于Vue.js,支持跨平台开发(H5、小程序、App等)。组件分为内置基础组件(如<view>、<button>)和自定义组件…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

vue实现路由组件

vue实现路由组件

Vue 实现路由组件的方法 在 Vue 中实现路由功能通常需要结合 Vue Router 库,以下是具体实现步骤: 安装 Vue Router 通过 npm 或 yarn 安装 Vue Router…

vue基础组件实现

vue基础组件实现

Vue 基础组件实现 组件定义 使用 Vue.component 全局注册或局部注册组件。全局注册适合通用组件,局部注册适合特定页面使用的组件。 // 全局注册 Vue.component('my-…

vue缩放组件实现

vue缩放组件实现

Vue 缩放组件实现方法 基于 CSS transform 实现缩放 通过 CSS 的 transform: scale() 属性实现基础缩放效果。在 Vue 中动态绑定 scale 值,结合鼠标事…

vue实现组件复制

vue实现组件复制

vue实现组件复制的方法 使用v-for指令 通过v-for循环生成多个相同结构的组件,适用于需要批量生成相似组件的场景。 <template> <div> &l…