React:如何将值传递给我的主 App() 函数

React: How can I pass a value to my main App() function

我有一个 React 应用程序,我想将一个值(“groupId”)传递给主要的应用程序组件。

我的应用程序组件定义为 function App()。我尝试使用以下方式传递参数值:

index.tsx:

import React from 'react';
import ReactDOM from 'react-dom';
import './scss/index.scss';
import App from './App';

const targetDivName= 'myapp-ui';
const targetDiv = document.getElementById(targetDivName);
const groupId: string = targetDiv?.getAttribute("data-group-id") ?? '';

ReactDOM.render(
  <React.StrictMode>
    <App groupId={ groupId } />
  </React.StrictMode>,
  targetDiv
);

App.tsx:

import React from "react";
import { Box } from "./components/Box";
import styles from './scss/App.module.scss';

function App(groupId: string) {
    return (
        <div className={ styles.orchestratorUi }>
          <Box groupId={ groupId } />
        </div>
    );
}

export default App;

但这会产生以下错误(编译和 运行):

Type '{ groupId: string; }' is not assignable to type 'string'.ts(2322)

如何通过我的 App() 将 HTML 代码中的值传递到主要组件(本例中为 Box)。

道具作为 对象 传递,因此更改

function App(groupId: string) {

//                    vvvvvvvvvvvvvvvvvvv−−−−−− declaring the type of props
function App({groupId}: {groupId: string}) {
//           ^^^^^^^^^−−−−−−−−−−−−−−−−−−−−−−−−− using destructuring

App 的第一个参数声明为 {groupId: string} 类型,并使用解构从 props 中获取 groupId

你需要改变

function App(groupId: string) {

function App({groupId}: any) {

甚至更好

interface Props {
  groupId: string
}

function App({ groupId }: Props) {

您的代码发生的情况是,typescript 将 function App(groupId: string) { 中的 groupId 解释为 string 类型,而是在您实例化 App 时接收一个对象。

在您的例子中,此对象是 {"groupId": groupId},其中 groupId 是您在 App.tsx 中分配的变量。

你的索引很好,你的主要组件应该是这样的: 功能应用程序(道具){ . . . .

那是因为 React 组件接受 props 作为对象。

首先,需要像这样从 props 对象中获取 groupId

function App({ groupId }) {

Here 您可以找到函数组件的类型。

因此 App 组件接受的定义 props 的正确方法是:

import React from "react";
import { Box } from "./components/Box";
import styles from './scss/App.module.scss';

interface AppProps {
  groupId: string;
}

// React.FC is an alias for React.FunctionComponent
// https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/react/v16/index.d.ts#L544
const App: React.FC<AppProps> = ({ groupId }) => {
  return (
    <div className={ styles.orchestratorUi }>
      <Box groupId={ groupId } />
    </div>
  );
};

export default App;