Wątek przeniesiony 2024-04-18 14:11 z JavaScript przez Riddle.

Eksportowanie komponentów między dokumentami

0

Witam

Pytanie z działu podstaw React. Jeśli chcemy wyeksportować funkcję z jednego pliku do drugiego do innej funkcji musielibyśmy dodać jej przedrostek export default natomiast w drugim dokumencie zaimportować ją i zwrócić ją w innej funkcji.

Natomiast aby wyeksportować funkcje do klasy znajdującej sie w innym dokumencie musielibyśmy na dole dokumentu przypisać ją do obiektu reprezentowanego przez ReactDOM oraz dodać funkcję renderowania. W samej klasie klasie głównej rozszerzonej o komponent w innym dokumencie zwrócić ją w funkcji renderowania.

Bez obiektu ReactDOM klasa chyba jej nie rozpozna. Pytam ponieważ nie jestem pewien czy w dobry sposób to rozumiem. Starałem się jak najlepiej to opisać ;)

1
delform_17 napisał(a):

przypisać ją do obiektu reprezentowanego przez ReactDOM oraz dodać funkcję renderowania.

Ale po co? 🧐

Co próbujesz zrobić? Najlepiej pokaż kod.

0
delform_17 napisał(a):

Witam

Pytanie z działu podstaw React. Jeśli chcemy wyeksportować funkcję z jednego pliku do drugiego do innej funkcji musielibyśmy dodać jej przedrostek export default

Samo export wystarczy. Owszem, można dać export default, ale jest to szczególny przypadek eksportu, który tylko może być jeden na cały moduł i który się importuje w inny sposób niż normalne deklaracje. https://developer.mozilla.org/en-US/docs/web/javascript/reference/statements/export

Natomiast aby wyeksportować funkcje do klasy znajdującej sie w innym dokumencie musielibyśmy na dole dokumentu przypisać ją do obiektu reprezentowanego przez ReactDOM oraz dodać funkcję renderowania.

Coś ci się chyba pomieszało, bo to zdanie nie ma sensu w kontekście JavaScript i Reacta.

Co to znaczy przypisać ją do obiektu reprezentowanego przez ReactDOM?

Co to znaczy dodać funkcję renderowania? (chodzi ci o utworzenie nowego komponentu funkcyjnego, ew. utworzenie metody render() w komponencie klasowym? No dobra, ale jaki to ma związek z czymkolwiek, o czym piszesz wcześniej?

0

Book ma być komponentem React czy ma być tablicą? Bo w Sample16.tsx definiujesz tablicę o takiej nazwie, a w MainClass.tsx importujesz to i traktujesz Book jakby było komponentem, którym nie jest.

Jeśli chcesz wyświetlić dane z tablicy, to możesz to zrobić mapując np.

<div>
    {
         Book.map(book => <div key={book.id}>{book.title}</div>)
    }
</div>

Przy czym najlepiej byłoby zmienić nazwę z Book np. na books (nazewnictwo Book sugeruje, że jest to klasa albo komponent Reacta, którym przecież nie jest).

No i zastanawiam się, czemu ma służyć bezpośrednie renderowanie w pliku Sample16.tsx:

const element = ReactDOM.createRoot(document.getElementById('root'));
element.render(<YearOfPublished />);

Jest to trochę nietypowe, ponieważ zwykle renderuje się w ten sposób korzeń aplikacji, a cała reszta jest automatycznie renderowana. Natomiast pliki zwykle eksportują poszczególne komponenty, ale nie renderują się same (ponieważ zwykle zakłada się, że takiego komponentu można użyć w wielu różnych miejscach i nie ma co renderować na sztywno)

Natomiast napisałeś:

Natomiast aby wyeksportować funkcje do klasy znajdującej sie w innym dokumencie musielibyśmy na dole dokumentu przypisać ją do obiektu reprezentowanego przez ReactDOM oraz dodać funkcję renderowania. W samej klasie klasie głównej rozszerzonej o komponent w innym dokumencie zwrócić ją w funkcji renderowania.

co sugeruje, że masz nie do końca dokładny model tego, do czego służy ta funkcja. ReactDOM nie jest do eksportowania, tylko do renderowania komponentów na ekranie komputera (ponieważ same komponenty tylko zwracają reprezentację tego, jak mają wyglądać i funkcja createRoot(.....).render() służy właśnie do wyświetlania komponentów).

0

Ok, chyba pojmuje to renderowanie aczkolwiek jeśli chce wyeksportować funkcję i wyświetlić na ekranie to renderuje ją na końcu dokumentu w którym jest zawarta oraz zwracam w klasie głównej.

1 użytkowników online, w tym zalogowanych: 0, gości: 1