当前位置:首页 > 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,然后在多个组件中调用。

// 自定义 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。

// 定义 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 时,可以通过路由参数传递数据。

react中用hooks组件如何传参

// 路由配置
<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 组件中常见的参数传递场景,可以根据具体需求选择合适的方式。

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

相关文章

vue实现穿梭框树组件

vue实现穿梭框树组件

Vue 穿梭框树组件实现 穿梭框树组件通常结合了树形结构和穿梭框功能,允许用户在左右两栏之间移动树节点数据。以下是基于 Vue 的实现方案: 核心功能设计 数据结构 树形数据通常采用嵌套结构,例如:…

uniapp 滑动组件

uniapp 滑动组件

uniapp 滑动组件实现方法 使用swiper组件 uniapp内置的swiper组件可以实现滑动效果,适用于轮播图或页面切换场景。 示例代码: <swiper :indicator-d…

vue实现组件通信

vue实现组件通信

Vue 组件通信方法 Vue 提供了多种方式实现组件间的通信,适用于不同场景。以下是常见的方法: Props 和 Events 父组件通过 props 向子组件传递数据,子组件通过 $emit 触…

vue 实现弹窗组件

vue 实现弹窗组件

Vue 弹窗组件实现 基础弹窗组件结构 创建一个名为Modal.vue的文件,定义弹窗的基础结构和样式: <template> <div class="modal-mask"…

vue 实现动态组件

vue 实现动态组件

Vue 动态组件的实现方法 在 Vue 中,可以通过 <component> 标签结合 is 属性实现动态组件切换。以下是具体实现方式: 使用 is 属性绑定组件名 <templ…

vue 实现通用组件

vue 实现通用组件

Vue 实现通用组件的方法 封装可复用的组件 将通用功能抽象为独立组件,通过props接收外部数据,通过events与父组件通信。例如封装按钮、输入框、弹窗等基础组件。 使用插槽增强灵活性 通过默认…