У меня есть родительский файл в React, в котором я выполняю множественную выборку API с помощью хука useState. Вот код:
const [species, setSpecies] = useState([]);
useEffect(() => {
axios
.get(`https://pokeapi.co/api/v2/pokemon-species/${name}`)
.then((results) => {
return results.data;
})
.then((results) => {
setSpecies(results);
});
}, [name]);
А вот фрагмент моего кода в дочернем элементе:
<li className='pokemon_data_container_list_desc'>
{species?.flavor_text_entries?.map((sf) =>
sf?.language?.name === 'en' && sf?.version?.name === game &&
<>
{sf?.flavor_text?.replace('\u000c', ' ')}
</>
)}
</li>
Я хотел бы знать, как я могу экспортировать «виды» от родителя к ребенку.
Обновлено: спасибо за ответ (извините за глупый вопрос). Это мой первый раз, когда я использую React, и я никогда раньше не использовал реквизит (я пытаюсь превратить огромные компоненты в несколько маленьких компонентов).
Мы передаем значения между компоненты, а не файлами. В конце концов, они все в одном пакете файлов.
Это простой ответ, мы используем реквизит.
В дочернем компоненте вы можете принимать реквизиты следующим образом:
function childComponent(props) {
props.props.species // species will be sent over like an object
}
передать реквизит childComponent
<childComponent props = {species} />
Вы можете просто передать значение в качестве реквизита дочернему элементу. Это определенно одна из основных частей начала работы с React, поэтому я настоятельно рекомендую прочитать документация по компонентам и пропсам.
Вот как это может выглядеть в вашем примере:
function Parent() {
const [species, setSpecies] = useState([]);
useEffect(() => {
axios
.get(`https://pokeapi.co/api/v2/pokemon-species/${name}`)
.then((results) => {
return results.data;
})
.then((results) => {
setSpecies(results);
});
}, [name]);
return (
<>
// ...
<Child species = {species} />
</>
);
}
function Child({ species }) {
return (
<>
// ...
<li className='pokemon_data_container_list_desc'>
{species?.flavor_text_entries?.map((sf) =>
sf?.language?.name === 'en' && sf?.version?.name === game &&
<>
{sf?.flavor_text?.replace('\u000c', ' ')}
</>
)}
</li>
</>
);
}
Вам нужно передать виды дочернему компоненту в качестве реквизита. Вот пример того, как это сделать. https://codesandbox.io/s/falling-surf-2sxdln?file=/src/App.js:0-434
// App.js
import React, { useEffect, useState } from "react";
import axios from "axios";
import SpeciesList from "./SpeciesList";
export default function App() {
const [species, setSpecies] = useState([]);
useEffect(() => {
axios
.get(`https://pokeapi.co/api/v2/pokemon-species/${name}`)
.then((results) => setSpecies(results.data.results));
}, []);
return <SpeciesList species = {species} />;
}
// SpeciesList.js
import React from "react";
export default function SpeciesList({ species = [] }) {
return (
<ul>
{species.map((s) => (
<li key = {s.name}>{s.name}</li>
))}
</ul>
);
}
Передать его дочернему компоненту в качестве реквизита?