Я пытаюсь отобразить свою функцию HOC в ReactJS, но она выдает ошибку. Вот несколько фрагментов (я вырезал несвязанный материал для простоты и ясности):
В моем app.js
компоненте я импортирую свой HOC как таковой:
import React, { Component } from "react";
import "./App.css";
import { Route, Switch, BrowserRouter as Router } from "react-router-dom";
import Home from "../Home/Home";
import StoriesHOC from "../Story/GetAllStories/Stories";
export default class App extends Component {
render() {
return (
<Router>
<div>
<Navigation />
<Switch>
<Route exact path="/" component={Home} />
<Route
path="/all_stories"
render={() => {
return <StoriesHOC />;
}}
/>
</Switch>
</div>
</Router>
);
}
}
Затем перейдем в <StoriesHOC />
:
import React from "react";
import StoryShow from "../StoryShow/StoryShow";
import { Query, Fetching, Error } from "react-apollo";
import { getStories } from "../../Queries/Queries";
function Stories({ stories, getStoriesQuery }) {
return (
<div>
<div className="stories_header">
<h2>All Stories</h2>
</div>
<div className="stories-container">
{stories.map(story => (
<StoryShow
key={story.id}
story={story}
getStoriesQuery={getStoriesQuery}
/>
))}
</div>
</div>
);
}
export default function StoriesHOC(props) {
return (
<Query query={getStories}>
{({ loading, error, data }) => {
console.log(data)
if (error) return <Error />
if (loading || !data) return <Fetching />
return <Stories
{...props}
getStoriesQuery={getStories}
stories={(data && data.stories) || []}/> }}
</Query>
);
}
РЕДАКТИРОВАТЬ: Вот компонент StoryShow, поскольку он тоже экспортируется как функция по умолчанию.
import React from "react";
import { Link } from 'react-router-dom'
export default function StoryShow({
story: {id, title, author, tagline, summary} = {}
}) {
return (
<div>
<h1>{title}</h1>
<h2>{tagline}</h2>
<h3>{author}</h3>
<p>{summary}</p>
<Link exact to={'/story/' + id}>Read More</Link>
</div>
)
}
Фактический запрос GraphQL, import { getStories } from "../../Queries/Queries";
выполняется в другом файле и форматируется следующим образом:
import gql from "graphql-tag";
export const getStories = gql`
query getStories {
stories {
id
title
author
tagline
}
}
`;
Однако фактическая ошибка, отображаемая в браузере Chrome:
Element type is invalid: expected a string (for built-in components)
or a class/function (for composite components) but got: undefined. You
likely forgot to export your component from the file it's defined in,
or you might have mixed up default and named imports.
Check the render method of `StoriesHOC`.
Позже он дает строку, в которой останавливается, что <Query query={getStories}>
видно ранее в функции StoriesHOC. При этом кажется, что моя проблема проистекает из одной только этой строки, но, хотя я и был всеми силами, пытавшимися решить проблему, мое лучшее предположение - только то, что я делаю что-то не так в моем запросе GraphQL, однако, когда я проверяю IDE в бэкэнде, он прекрасно отрисовывается.
Существует также проблема выяснения, правильно ли я экспортировал импортированную функцию в мой файл app.js, но я знаю, что, поскольку я экспортировал с использованием export default function myFunc
, она должна быть импортирована в текущем состоянии.
Буду признателен за любую помощь, а также за советы или критические замечания. Заранее спасибо!