Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应类型脚本传递道具和数据类型_Reactjs_Typescript - Fatal编程技术网

Reactjs 反应类型脚本传递道具和数据类型

Reactjs 反应类型脚本传递道具和数据类型,reactjs,typescript,Reactjs,Typescript,我对打字脚本还很陌生,我有几个问题要问。我的代码中有一些错误,我不确定如何传递道具并选择正确的类型。如果你能帮我一点忙,我将不胜感激 你有没有一个好的来源,我可以在一个地方找到所有必要的反应信息只是为了开始 tl;博士 {data}类型是什么?如何定义它 如何将函数作为道具传递到Results.tsx文件?如何在此函数中定义结果、结果和openPopup 我错过什么了吗 App.tsx import React, { useState } from 'react' import axios f

我对打字脚本还很陌生,我有几个问题要问。我的代码中有一些错误,我不确定如何传递道具并选择正确的类型。如果你能帮我一点忙,我将不胜感激

你有没有一个好的来源,我可以在一个地方找到所有必要的反应信息只是为了开始

tl;博士

  • {data}类型是什么?如何定义它
  • 如何将函数作为道具传递到Results.tsx文件?如何在此函数中定义结果、结果和openPopup
  • 我错过什么了吗
  • App.tsx

     import React, { useState } from 'react'
    import axios from 'axios'
    
    import Search from './components/Search'
    import Results from './components/Results'
    import Popup from './components/Popup'
    
    
    export type selected = {
        Title?: string,
        Year?:number
    }
    
    type values = {
    s: string,
    results: string[],
    selected: selected,
    }
    
    interface popup {
        id: string
    }
    
    const App: React.FC = () => {
      const [state, setState] = useState<values>({
        s: "",
        results: [],
        selected: {}
      });
    
    
      const apiurl = "http://www.omdbapi.com/?apikey=dfe6d885";
    
      const search = (e: React.KeyboardEvent<HTMLInputElement>) => {
        if (e.key === "Enter") {
          axios(apiurl + "&s=" + state.s).then(({ data }) => {
            let results = data.Search;
    
            setState(prevState => {
              return { ...prevState, results: results }
            })
          });
        }
      }
      
      const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {
        let s = e.target.value;
    
        setState(prevState => {
          return { ...prevState, s: s }
        });
      }
    
      const openPopup = (id : string) => {
        axios(apiurl + "&i=" + id).then(({ data }) => {
          let result = data;
    
          console.log(result);
    
          setState(prevState => {
            return { ...prevState, selected: result }
          });
        });
      }
    
      const closePopup = () => {
        setState(prevState => {
          return { ...prevState, selected: {} }
        });
      }
    
      return (
        <div className="App">
          <header>
            <h1>Movie Database</h1>
          </header>
          <main>
            <Search handleInput={handleInput} search={search} />
    
            <Results results={state.results} openPopup={openPopup} />
    
            {(typeof state.selected.Title != "undefined") ? <Popup selected={state.selected} closePopup={closePopup} /> : false}
          </main>
        </div>
      );
    }
    
    export default App
    
    import React from 'react'
    
    import Result from './Result'
    
    function Results ({ results, openPopup }) {
        return (
            <section className="results">
                {results.map(result => (
                    <Result key={result.imdbID} result={result} openPopup={openPopup} />
                ))}
            </section>
        )
    }
    
    export default Results
    
    import React,{useState}来自“React”
    从“axios”导入axios
    从“./components/Search”导入搜索
    从“./components/Results”导入结果
    从“./components/Popup”导入弹出窗口
    选择的导出类型={
    标题?:字符串,
    年份:数字
    }
    类型值={
    s:弦,
    结果:字符串[],
    选中:选中,
    }
    界面弹出窗口{
    id:字符串
    }
    常量应用程序:React.FC=()=>{
    常量[状态,设置状态]=使用状态({
    s:“,
    结果:[],
    所选:{}
    });
    常量apiurl=”http://www.omdbapi.com/?apikey=dfe6d885";
    常量搜索=(e:React.KeyboardEvent)=>{
    如果(e.key==“输入”){
    axios(apiurl+“&s=“+state.s)。然后({data})=>{
    让results=data.Search;
    设置状态(prevState=>{
    返回{…prevState,结果:results}
    })
    });
    }
    }
    常量handleInput=(e:React.ChangeEvent)=>{
    设s=e.target.value;
    设置状态(prevState=>{
    返回{…prevState,s:s}
    });
    }
    const openPopup=(id:string)=>{
    axios(apiurl+“&i=“+id”)。然后({data})=>{
    让结果=数据;
    控制台日志(结果);
    设置状态(prevState=>{
    返回{…prevState,选定:结果}
    });
    });
    }
    const closePopup=()=>{
    设置状态(prevState=>{
    返回{…prevState,选定:{}
    });
    }
    返回(
    电影数据库
    {(typeof state.selected.Title!=“未定义”)?:false}
    );
    }
    导出默认应用程序
    
    结果。tsx

     import React, { useState } from 'react'
    import axios from 'axios'
    
    import Search from './components/Search'
    import Results from './components/Results'
    import Popup from './components/Popup'
    
    
    export type selected = {
        Title?: string,
        Year?:number
    }
    
    type values = {
    s: string,
    results: string[],
    selected: selected,
    }
    
    interface popup {
        id: string
    }
    
    const App: React.FC = () => {
      const [state, setState] = useState<values>({
        s: "",
        results: [],
        selected: {}
      });
    
    
      const apiurl = "http://www.omdbapi.com/?apikey=dfe6d885";
    
      const search = (e: React.KeyboardEvent<HTMLInputElement>) => {
        if (e.key === "Enter") {
          axios(apiurl + "&s=" + state.s).then(({ data }) => {
            let results = data.Search;
    
            setState(prevState => {
              return { ...prevState, results: results }
            })
          });
        }
      }
      
      const handleInput = (e: React.ChangeEvent<HTMLInputElement>) => {
        let s = e.target.value;
    
        setState(prevState => {
          return { ...prevState, s: s }
        });
      }
    
      const openPopup = (id : string) => {
        axios(apiurl + "&i=" + id).then(({ data }) => {
          let result = data;
    
          console.log(result);
    
          setState(prevState => {
            return { ...prevState, selected: result }
          });
        });
      }
    
      const closePopup = () => {
        setState(prevState => {
          return { ...prevState, selected: {} }
        });
      }
    
      return (
        <div className="App">
          <header>
            <h1>Movie Database</h1>
          </header>
          <main>
            <Search handleInput={handleInput} search={search} />
    
            <Results results={state.results} openPopup={openPopup} />
    
            {(typeof state.selected.Title != "undefined") ? <Popup selected={state.selected} closePopup={closePopup} /> : false}
          </main>
        </div>
      );
    }
    
    export default App
    
    import React from 'react'
    
    import Result from './Result'
    
    function Results ({ results, openPopup }) {
        return (
            <section className="results">
                {results.map(result => (
                    <Result key={result.imdbID} result={result} openPopup={openPopup} />
                ))}
            </section>
        )
    }
    
    export default Results
    
    从“React”导入React
    从“./Result”导入结果
    函数结果({Results,openPopup}){
    返回(
    {results.map(结果=>(
    ))}
    )
    }
    导出默认结果
    
    道具类型 您可以定义传递给函数组件的道具

    function Results ({ results, openPopup }: { results: MyResult[], openPopup: () => void }) {
    
    但是更常见的是为道具定义一个单独的
    接口

    interface Props {
        results: MyResult[];
        openPopup: () => void;
    }
    
    您可以使用它直接定义道具

    function Results ({ results, openPopup }: Props) {
    
    或通过
    React.FC

    const Results: React.FC<Props> = ({ results, openPopup }) => {
    
    现在,
    data
    变量自动具有
    MyApiResponse
    类型