【问题标题】:React TypeScript: react-markdown no overload matches this callReact TypeScript:react-markdown 没有重载匹配此调用
【发布时间】:2020-02-17 08:30:13
【问题描述】:

如果需要,我很乐意转移到另一个库,但是 react-markdown 似乎有很好的报告,但是,当我尝试在功能组件中将它与 typescript 一起使用时,我得到了以下错误。

import React from 'react';
import Markdown from 'react-markdown';

const Home: React.FC = () => {

  const getMarkdown = async () => {
    const markdown = await fetch('../markdown/home.md');
    const text = await markdown.text();
    return text;
  }
  const src = getMarkdown();

  return (    
      <div className='max-width'>
          <span className='body'>
            <Markdown source={src} />
          </span>
      </div>
  );
}

export { Home };

我得到的错误是

No overload matches this call.
  Overload 1 of 2, '(props: Readonly<ReactMarkdownProps>): ReactMarkdown', gave the following error.
    Type 'Promise<Response>' is not assignable to type 'string'.
  Overload 2 of 2, '(props: ReactMarkdownProps, context?: any): ReactMarkdown', gave the following error.
    Type 'Promise<Response>' is not assignable to type 'string'.  TS2769

【问题讨论】:

  • src 是一个承诺而不是一个字符串。
  • 谢谢约瑟夫,我添加了一个等待并得到更多错误

标签: reactjs typescript markdown


【解决方案1】:

你可以使用反应钩子

const Home = () => {
const [text, setText] = useState(null);
  useEffect(() => {
     async function getText() {
         const markdown = await fetch('../markdown/home.md');
         const text = await markdown.text();
         setText(text);
     }
     getText();
  }, []);
  return (<div className='max-width'>
          <span className='body'>
            <Markdown source={text} />
          </span>
      </div>);
}

【讨论】:

  • 这当然清除了错误,但降价不呈现
  • 只需验证text 是否正在使用降价内容进行更新。
  • 当我记录文本时,我没有看到来自 home.md 的任何内容,而是看到来自站点的 html
    我的猜测是markdown文件的路径可能是错误的,尝试使用一些在线markdown文件(CORS可能是一个问题)
  • 如果我将 markdown 文件夹移动到 ./public 然后链接到它,它可以工作,谢谢!
猜你喜欢
相关资源
最近更新 更多
热门标签