Я использую reactjs и graphql для создания темы wordpress. Пытаюсь сделать что-то вроде этого 
Но я не могу найти лучшего способа сделать это, передав реквизиты сообщения трем разным компонентам, что, на мой взгляд, не является хорошим способом.
import React, { Component } from 'react';
import { graphql } from 'react-apollo'
import { getAllPosts } from '../graphql/queries/posts'
import Layout from '../component/Layouts';
import RenderPost from '../component/RenderPost';
import RenderPostExcerpt from '../component/RenderPostExcerpt';
import RenderAllPost from '../component/RenderAllPost';
class Home extends Component {
render() {
const posts = this.props.data.posts;
console.info(posts);
return (
<Layout>
{!posts && <h1>Loading...</h1>}
{posts &&
<div>
<RenderPost posts = {posts}/>
<RenderPostExcerpt posts = {posts}/>
<RenderAllPost posts = {posts}/>
</div>
}
</Layout>
);
}
}
export default graphql(getAllPosts)(Home);
Я получаю данные из wordpress, используя graphql, здесь Home.js - родительский компонент. Есть ли другой способ сделать это?
да сообщения - это массив сообщений. внутри Renderpost.js я вырезаю первый пост из состояния покоя, а в другом файле я визуализирую остальную часть поста, кроме первого.
Вы всегда нарезаете только первый пост? Что, если вы хотите отобразить вторую или третью публикацию?
Я сделал что-то вроде этого posts.slice (0, 1) .map (post => ()) для первого сообщения и posts.slice (1, 5) .map (post => ()) для правой стороны сообщения, где Мне не нужно передавать imageurl, чтобы увидеть изображение. И я не уверен, что это правильно или нет, я впервые делаю что-то подобное.
хорошо, но ... в любом случае, можете ли вы более четко сформулировать, чего хотите? Единственная проблема в том, что вы пишете posts = {posts} трижды?
Я хочу знать, правильный ли это способ сделать это, поскольку я никогда не видел, чтобы что-то подобное передавало одни и те же реквизиты 3 разным компонентам.
или есть ли другой способ, который можно использовать с redux. Я не уверена .
Совершенно нормально. Можно было сделать по-другому, но не лучше. Я думаю, что в вашем коде было бы гораздо больше смысла не передавать все сообщения в RenderPost ... он должен взять одну опору под названием post или даже кучу постов и сделать <RenderPost {...post} /> или что-то в этом роде
вы можете использовать redux, но это совершенно другое решение, не связанное с вашим вопросом. нет абсолютно ничего плохого в том, чтобы передать одну и ту же опору нескольким компонентам, это 100% обычное дело
Хорошо, спасибо, я постараюсь передавать сообщения вместо сообщений каждому компоненту.





posts- это массив данныхpost?RenderPostподразумевает отдельный пост, но похоже, что вы их все пропустите.