Loading...
Loading...
Compare original and translation side by side
propspropsDogImagespropspropsDogImagesDogsImagesDogImagesDogImagesDogImagesDogImagesContainerexport default function useDogImages() {
const [dogs, setDogs] = useState([]);
useEffect(() => {
fetch("https://dog.ceo/api/breed/labrador/images/random/6")
.then((res) => res.json())
.then(({ message }) => setDogs(message));
}, []);
return dogs;
}DogImagesContainerDogImagesDogImagesuseDogImagesuseDogImagesDogImagesDogImagesContainerexport default function useDogImages() {
const [dogs, setDogs] = useState([]);
useEffect(() => {
fetch("https://dog.ceo/api/breed/labrador/images/random/6")
.then((res) => res.json())
.then(({ message }) => setDogs(message));
}, []);
return dogs;
}DogImagesContainerDogImagesDogImagesuseDogImagesuseDogImagesDogImagesNote (React 18+): Modern React strongly favors Hooks over container components for separating logic from views. Custom Hooks can replace class-based containers entirely — for example, ahook can fetch data usinguseDogImagesanduseState, then any component can simply calluseEffectto get the data. This achieves the same separation of concerns (data fetching vs UI) with less boilerplate and no wrapper component. This Hook-based approach is also friendly to React's upcoming optimizations — the React Compiler can better optimize functional components and Hooks than class lifecycles.const dogs = useDogImages()
注意(React 18+): 现代React强烈推荐使用Hooks而非容器组件来分离逻辑与视图。自定义Hooks可以完全替代基于类的容器组件——例如,Hook可以通过useDogImages和useState获取数据,然后任何组件只需调用useEffect就能获取数据。这种方式实现了相同的关注点分离(数据获取与UI),且代码更简洁,无需额外的包裹组件。这种基于Hook的方式也更适配React未来的优化——React编译器对函数组件和Hooks的优化效果优于类组件的生命周期。const dogs = useDogImages()