gatsby-node.js createPages не отправляет данные компоненту в pageContext - PullRequest
0 голосов
/ 31 декабря 2018

Вы видите, что я записываю данные, возвращенные из моей лямбда-функции.Данные определенно возвращаются, как и ожидалось.Однако в createPage (...) allMessages в pageContext в компоненте dashboard.js всегда имеет значение null / undefined.

Почему? ...

dashboard.js

const DashboardPage = ({ pageContext: { allMessages } }) => (
    <Layout>
        <SEO title="Dashboard" keywords={[`gatsby`, `application`, `react`]} />
        <h1>Dashboard</h1>
        <p>Welcome to your new Gatsby site.</p>
        {console.log('allMessages: ', allMessages)}
        {allMessages.map(mssg => (
            <li
                key={mssg.id}
                style={{
                    textAlign: 'center',
                    listStyle: 'none',
                    display: 'inline-block'
                }}
            >
                <Link to={`/message/${mssg.name}`}>
                    <p>{mssg.name}</p>
                </Link>
            </li>
        ))}
    </Layout>
);

export default DashboardPage;

gatsby-node.js

exports.createPages = async ({ actions: { createPage } }) => {
    get('get-messages')
        .then(allMessages => {
            console.log('gatsby-node allMessages: ', allMessages);
            // Create a page that lists all Pokémon.
            createPage({
                path: `/dashoard`,
                component: require.resolve('./src/pages/dashboard.js'),
                context: { allMessages }
            });
        })
        .catch(err => {
            return Promise.reject(new Error(err));
        });
};

Я заблокирован.Спасибо, что поделились своим опытом!

РЕДАКТИРОВАТЬ:

Это тоже не работает.То же не определено в dashboard.js ...

exports.createPages = async ({ actions: { createPage } }) => {
    get('get-messages')
        .then(allMessages => {
            // allMessages = typeof allMessages === 'string' ? JSON.parse(allMessages) : allMessages;
            // console.log('gatsby-node allMessages: ', allMessages);
            // // Create a page that lists all Pokémon.
            const test = [{ name: 'Test message' }];
            createPage({
                path: `/dashoard`,
                component: require.resolve('./src/pages/dashboard.js'),
                context: { allMessages: test }
            });
        })
        .catch(err => {
            return Promise.reject(new Error(err));
        });
};

1 Ответ

0 голосов
/ 01 января 2019

Данные контекста, которые вы передаете в CreatePages, уже доступны в вашем компоненте DashboardPage в качестве реквизита.
Вместо того, чтобы пытаться передать их в свой компонент DashboardPage в качестве параметра, попробуйте получить доступ к данным allMessages напрямую с помощью this.props.pageContext.

...