React Native “X”不能用作JSX组件,其返回类型“Element[]”不是有效的JSX元素

bvjveswy  于 2022-12-24  发布在  React
关注(0)|答案(2)|浏览(623)

我在TypeScript中渲染两个简单的笑话卡,卡确实显示在我的浏览器中,但我也得到这个错误:* “Jokes”不能用作JSX组件。其返回类型“Element[]”不是有效的JSX元素。类型“Element[]"缺少类型”ReactElement〈any,any〉“的以下属性:类型、 prop 、密钥*
我是TypeScript新手,一辈子都搞不清楚问题是什么。我曾尝试在App.tsx文件的<Jokes />之间添加<></>,但没有效果。我搞不清楚,希望有人能指导我解决这个问题。
Jokes.tsx

import { jokeList, JokesPunchlines } from './jokeList';
import './App.css';

function Jokes() {
    return (
        jokeList.map((joking: JokesPunchlines) => {
            return (
                <div className="box">
                    <strong>{joking.setup}</strong>
                    <br />
                    <p>{joking.punchline}</p>
                </div>
            );
        })
    );
}

export default Jokes;

Joke List

export interface JokesPunchlines {
    id: number,
    setup: string,
    punchline: string,
}

export const jokeList: JokesPunchlines[] = [
    {
        id: 1,
        setup: "What's the best thing about a Boolean?",
        punchline: "Even if you're wrong, you're only off by a bit"
    },
    {
        id: 2,
        setup: "Why do programmers wear glasses?",
        punchline: "Because they need to C#"
    }
];

App.tsx

import './App.css';
import Jokes from './Jokes';

function App() {
  return (
    <Jokes />
  );
}

export default App;

index.tsx

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

ReactDOM.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>,
  document.getElementById('root')
);

我试过在我的App.tsx文件中的<Jokes />之间添加<></>,但是不起作用。我想不通,希望有人能指导我解决这个问题。

dm7nw8vv

dm7nw8vv1#

正如错误所言,React组件数组本身并不是React组件。虽然它在JavaScript中仍然可以工作,但TypeScript不喜欢它。您可以通过在返回的数组周围添加JSX片段来纠正它,并将数组插入到片段中。您还可以省略: JokesPunchlines,因为jokeList输入正确(也可以调用Map参数、joke对象、jokejokeObj或其他名称-joking不是一个好的变量名)。

function Jokes() {
    return (
        <>
            {
                jokeList.map((joke) => {
                    return (
                        <div className="box">
                            <strong>{joke.setup}</strong>
                            <br />
                            <p>{joke.punchline}</p>
                        </div>
                    );
                })
            }
        </>
    );
}
hk8txs48

hk8txs482#

使用隐式返回的 typescript 有一些困难。
你可以用返回类型来输入函数笑话。这会很有帮助。
这也应该可以完成这项工作。

import { jokeList, JokesPunchlines } from './jokeList';
import './App.css';

function Jokes() {
    return <>{
        jokeList.map((joking: JokesPunchlines) => {
            return (
                <div className="box">
                    <strong>{joking.setup}</strong>
                    <br />
                    <p>{joking.punchline}</p>
                </div>
            );
        })
    }</>;
}

export default Jokes;

相关问题