当前位置:首页 > 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 组件中常见的参数传递场景,可以根据具体需求选择合适的方式。

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

相关文章

vue实现折叠组件

vue实现折叠组件

Vue 折叠组件实现方法 基于 v-show 和事件触发 通过 v-show 控制内容的显示与隐藏,结合点击事件切换状态。 <template> <div> &…

vue 实现toast组件

vue 实现toast组件

实现 Vue Toast 组件的方法 创建基础 Toast 组件 在 Vue 项目中创建一个基础 Toast 组件,通常包含消息内容和显示控制逻辑。 <template> <…

vue实现盖章组件

vue实现盖章组件

实现Vue盖章组件的步骤 组件结构设计 创建一个Vue组件,包含画布元素和必要的控制按钮。画布用于显示盖章效果,按钮用于触发盖章操作。组件需要接收图片和盖章位置等参数。 <template&…

vue实现search组件

vue实现search组件

Vue 实现搜索组件 基础实现 创建一个基础的搜索组件需要包含输入框和搜索逻辑。以下是一个简单的实现示例: <template> <div class="search-cont…

vue 动态组件实现

vue 动态组件实现

vue 动态组件实现 Vue 的动态组件功能允许根据条件或用户交互动态切换不同的组件,主要通过 <component> 标签和 is 属性实现。 基本用法 通过 is 属性绑定组件名或组…

vue实现列表组件

vue实现列表组件

Vue 列表组件实现方法 基础列表渲染 使用 v-for 指令渲染数组数据,需配合 :key 提升性能: <template> <ul> <li v-fo…