• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed TypeScript React przekazywanie propsów

Object Storage Arubacloud
0 głosów
529 wizyt
pytanie zadane 12 marca 2022 w JavaScript przez jarusek13 Początkujący (310 p.)
zamknięte 12 marca 2022 przez jarusek13

Witam, mam problem z przekazywaniem propsów jako obiekt. Większość tutoriali jest z przekazywaniem pojedyńczo wartości a nie obiektów. Przy przekazywaniu obiektu otrzymuje błąd:

Type '{ worker: { Name: string; Task: { Date: string; Project: string; Hours: number; Descriptions: string; }[]; }; }' is not assignable to type 'IntrinsicAttributes & Worker'.
Property 'worker' does not exist on type 'IntrinsicAttributes & Worker'.ts(2322)

 

const Main = () => {

    let Andrzej = {
        Name: "Andrzej",
        Task: [{
            Date: "13.02.2020",
            Project: "React",
            Hours: 5,
            Descriptions: "Nic nie robiłem",
        },{
            Date: "13.02.2020",
            Project: "TypeScript",
            Hours: 3,
            Descriptions: "Nic nie robiłem",
        }]};

    return (
        <div className='main'>
             <Table3 worker={Andrzej}></Table3> 
        </div>
    );
}

export default Main;

 

 

Component:


import React from "react";

type Worker = {
    Name: string,
    Task: Array<Info>,
}

type Info = {
    Date: string,
    Project: string,
    Hours: number,
    Descriptions: string,
}

const Table3 = (worker:Worker) => {

    return (
        <> <div className="tbl-header">

            <h1>{worker.Name}</h1>
            <table>
                <tr>
                    <th>Date</th>
                    <th>Project</th>
                    <th>Hours</th>
                    <th>Description</th>
                </tr>
                {worker.Task.map(x => (
                <tr>
                    <td>{x.Date}</td>
                    <td>{x.Project}</td>
                    <td>{x.Hours}</td>
                    <td>{x.Descriptions}</td>
                </tr>
                ))}
            </table>
        </div>
        </>
    );
};

export default Table3
komentarz zamknięcia: ROZWIĄZANE

2 odpowiedzi

+4 głosów
odpowiedź 12 marca 2022 przez ScriptyChris Mędrzec (190,190 p.)
wybrane 12 marca 2022 przez jarusek13
 
Najlepsza

Na oko, powinieneś rozpakować worker z propsów, które otrzymuje komponent Table3:

const Table3 = ({ worker }: { worker: Worker }) => {

 

komentarz 12 marca 2022 przez rafal.budzis Szeryf (85,260 p.)

+1

A najlepiej użyć od razu typu FC z React ;) 

const Table3: React.FC<{ worker: Worker }> = ({ worker }) => {

Od razu będziemy bezpieczniejsi odnośnie zwracanego typu ;) 

1
komentarz 12 marca 2022 przez ScriptyChris Mędrzec (190,190 p.)

React.FC ma wady, o których warto wspomnieć.

komentarz 12 marca 2022 przez CubeStorm Pasjonat (15,020 p.)
Dokładnie, lepiej typować bezpośrednio { props...}: ComponentPropsType lub przy użyciu React.memo<ComponentPropsTyle>, a children otypowac jako React.ReactNode
1
komentarz 12 marca 2022 przez rafal.budzis Szeryf (85,260 p.)

Ok wiem że FC typuje dzieci jednak porównajmy szkodliwość :) 

Gdy mamy otypowane dzieci których nie używamy jedyne co nas spotyka to martwy kod którego nie widzimy. 

Gdy zwracamy zły typ z komponentu funkcyjnego nasza aplikacja może się wywalić na produkcji. 

W mojej ocenie błąd na produkcji jest gorszy niż martwy kod ;) 

Dodatkowo Twój link podaje tylko jeden plus używania FC a jest jeszcze drugi. Można sobie wyciągać propsy z komponentów za pomocą infer ;) 
 U siebie w kodzie mam takie cudo :) 

export type ModalProps = {
    [P in ModalTypes]?: ModalType[P] extends React.FC<infer T> ? Omit<T, 'close' | 'isOpen'> : any;
};

Gdybym nie stosował FC miałbym lekki problem żeby z tego skorzystać. 

komentarz 12 marca 2022 przez CubeStorm Pasjonat (15,020 p.)

Gdy zwracamy zły typ z komponentu funkcyjnego nasza aplikacja może się wywalić na produkcji. 

Jaki zły typ? 

0 głosów
odpowiedź 12 marca 2022 przez jarusek13 Początkujący (310 p.)

Dziękuję wszystkim za odpowiedźsmiley

komentarz 12 marca 2022 przez CubeStorm Pasjonat (15,020 p.)

Oznacz odpowiedź @ScriptyChris jako najlepszą i zamknij pytanie

Podobne pytania

0 głosów
0 odpowiedzi 99 wizyt
pytanie zadane 4 października 2023 w JavaScript przez reaktywny Nałogowiec (40,990 p.)
0 głosów
1 odpowiedź 270 wizyt
0 głosów
0 odpowiedzi 181 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...