首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从‘`Outlet`’到页面的通信

如何从‘`Outlet`’到页面的通信
EN

Stack Overflow用户
提问于 2022-10-19 09:39:31
回答 1查看 25关注 0票数 0

我的Layout.tsx:

代码语言:javascript
复制
import { FC, useState } from 'react';
import * as React from 'react';
import { Outlet } from 'react-router-dom';

export const Layout: FC = () => {
  const [name, setName] = useState('Mohamed');
  const updateName = (value) => {
    setName(value);
  };
  return (
    <div>
      <header>Header</header>
      <main>
        <Outlet props={name} fun={updateName} />
      </main>
      <footer>footer</footer>
    </div>
  );
};

我的注册页面:

代码语言:javascript
复制
import { FC, useState } from 'react';
import * as React from 'react';

export const Register: FC = ({
  name,
  fun,
}: {
  name: string;
  fun: (string) => void;
}) => {
  const [option, setOption] = useState<string>();
  React.useEffect(() => {
    console.log(name); //undefined
    setOption(name);
  }, [name]);

  const updateName = () => {
    fun('new name');
  };
  return (
    <div>
      <h1>{option}</h1>
      <button onClick={() => updateName()}>Click Me </button>
    </div>
  );
};

在我的注册页面中,当我试图通过调用获得一个错误的undefinedupdateName更新名称时,名称安慰为inc。有人告诉我正确的路吗?

现场演示

index.tsx:

代码语言:javascript
复制
import * as React from 'react';
import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { BrowserRouter, Routes, Route } from 'react-router-dom';
import { Register } from './register/Register';
import { Layout } from './layout/Layout';
import App from './App';

const rootElement = document.getElementById('root');
const root = createRoot(rootElement);

root.render(
  <StrictMode>
    <BrowserRouter>
      <Routes>
        <Route path="/" element={<Layout />}>
          <Route path="/" element={<App />} />
          <Route path="register" element={<Register />} />
        </Route>
      </Routes>
    </BrowserRouter>
  </StrictMode>
);
EN

回答 1

Stack Overflow用户

发布于 2022-10-19 10:37:14

以下是答案:

Layout.tsx:

代码语言:javascript
复制
import { FC, useState } from 'react';
import * as React from 'react';
import { Outlet } from 'react-router-dom';

export const Layout: FC = () => {
  const [name, setName] = useState('Mohamed');
  const updateName = (value) => {
    setName('new name');
  };
  return (
    <div>
      <header>Header</header>
      <main>
        <Outlet context={[name, updateName]} />
      </main>
      <footer>footer</footer>
    </div>
  );
};

Register.tsx:

代码语言:javascript
复制
import { FC, useState } from 'react';
import * as React from 'react';
import { useOutletContext } from 'react-router-dom';

export const Register: FC = () => {
  const [name, updateName] = useOutletContext();
  return (
    <div>
      <h1>Register page {name}</h1>
      <button onClick={() => updateName()}>Click Me </button>
    </div>
  );
};

现在数据可以从一个出口分解到另一个页面,页面可以更新出口道具以及调用该函数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74123139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档