Как показать конкретные детали сообщения, нажав с помощью кнопки-параметров-маршрутизатора? - PullRequest
0 голосов
/ 13 мая 2019

Я использую карту для просмотра всех сообщений, используя axios. И я просто хочу показать, когда я нажимаю на конкретный пост, чтобы увидеть больше информации. Я использую параметры реакции. Но это не работает.

Вот мой единственный компонент

import React, {Component} from 'react'; 
import Album from './album'
import {Link, BrowserRouter as Router, Route} from 'react-router-dom'

import axios from "axios" 

class ViewDataAPI extends Component{

    state = {
        posts: []
    }

    componentDidMount(){
        axios.get('https://jsonplaceholder.typicode.com/comments')
        .then(response => {
            this.setState({
                posts: response.data
            })
        })
        .catch(error => console.log('error'))
    }

    render(){  
        let { posts } = this.state
        if(posts.length === 0){
            return <h1>Loading...</h1>
        }
        else{
            return(
                <Router>
                    <div className="header">
                        <div className="container">
                        <div className="row">
                                <div className="col-lg-12 col-sm-12 col-xs-12">
                                    <div className="text-center mb-20">
                                        <h1>View Data From API</h1>
                                        <p>using jsx-component, props, state, map in react </p>
                                    </div>
                                </div>
                            </div> 
                            <div className="row">  
                                    {
                                        posts.map(post => 
                                            {
                                                return ( 
                                                        <Album 
                                                            key={post.id}  
                                                            name={post.name} 
                                                            email = {post.email} 
                                                            body = {post.body} 
                                                            view = {post.id} 

                                                        /> 
                                                )
                                            }
                                        )
                                    }   
                            </div>

                            {/* here is im using params, and to match by clicking specific id to show/view more information */}
                            <div className="row">  
                                  {posts && (
                                       <Route path="/album/:albumId" 
                                            render = {({match}) => (
                                                <ViewPosts {...posts.find(pv => pv.id === match.params.albumId)} />
                                            )}
                                       />
                                  )} 

                            </div>
                        </div> 
                    </div>
                </Router>
            )
        }


    }
}

export default ViewDataAPI;


// This component using for show details
const ViewPosts = ({posts}) =>{  
        return( 
            <div className="col-lg-6"> 
                <div className="card border-dark mb-3"> 
                    <div className="card-body text-dark">  
                        <div className="album">
                            <h3>{posts.name}</h3> 
                            <h3>{posts.email}</h3> 
                            <Link to="./">Back To Home</Link>

                        </div>
                    </div> 
                </div> 
            </div>   
        );

}

Это компонент альбома, имеющий ссылку

import React, {Component} from 'react'
import {Link} from "react-router-dom"

class Album extends Component{ 
    render(){ 
        return( 
            <div className="col-lg-6"> 
                <div className="card border-dark mb-3"> 
                    <div className="card-body text-dark">  
                        <div className="album">
                            <h3>{this.props.name}</h3>
                            <p>{this.props.email}</p>  
                            <p>{this.props.body}</p> 
                            <Link to={`/album/${this.props.view}`}>View</Link> 
                        </div>
                    </div> 
                </div> 
            </div>   
        );
    }
}

export default Album;

https://react -pin.netlify.com /

Пожалуйста, перейдите по ссылке выше к тому, что я пытаюсь сделать. Пожалуйста, сначала перейдите к одному "View Data From API"

Моя ссылка на github https://github.com/sultan0/reactpin

1 Ответ

0 голосов
/ 13 мая 2019
  • Параметром маршрута является строка. Нет неявного преобразования типов с === оператором. Поэтому вы должны сделать это явно. Pls. увидеть Операторы сравнения для дальнейшего объяснения.

  • Спред ... Оператор здесь неуместен.

Решение:

 <ViewPosts posts={posts.find(pv => pv.id === parseInt(match.params.albumId))} />

Обновление

Вы хотите использовать компонент Коммутатор с маршрутизатора реагирования:

Коммутатор уникален тем, что он отображает маршрут исключительно. Напротив, каждый Маршрут, который соответствует местоположению, рендерится включительно.

Пожалуйста, обратитесь к Реакция документации маршрутизатора .

Я создал запрос на получение в качестве примера. Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...