2017-11-29 14 views
1

나는 reactjs에 첫발을 내딛고 있습니다. 가져 오기를 사용하여 the movie db API에 대한 서비스를 만들었습니다. 나는 이미 영화의 이름을 열거하고있다.reactjs 서비스 및 프레젠테이션 구성 요소가 분할 됨

내가하려는 것은 completly independent 구성 요소를 가지고 있습니다. 한 구성 요소는 API 및 다른 구성 요소에 연결하여 해당 정보를 제공해야합니다. 지금 내가 같은 구성 요소 :(이 행동을 모두 가지고있는

은 누구도 날 도와 드릴까요?

다음은이 코드와 함께 아버지의 구성 요소가 내 코드

import React, { Component } from 'react'; 

const listUrl = 'https://api.themoviedb.org/4/list/5?api_key=a6ebd775daadc2ec23c371e873e20a02&page=1'; 

class ListingService extends Component { 
    constructor(props) { 
    super(props); 
    this.state = {}; 
    } 

    componentDidMount() { 
    fetch(listUrl) 
     .then((response) => { 
     if (!response.ok) { 
      throw Error('Network request failed'); 
     } 
     return response; 
     }) 
     .then((response) => { 
     return response.json(); 
     }) 
     .then((response) => { 
     this.setState({ 
      movieName: response.results.map((movie) => { 
      return (
       <li key={movie.id}>{movie.title}</li> 
      ); 
      }), 
     }); 
     },() => { 
     this.setState({ 
      requestFailed: true, 
     }); 
     }); 
    } 

    render() { 
    if (this.state.requestFailed) return <p>Failed!</p>; 
    if (!this.state.movieName) return <p>Loading...</p>; 
    return (
     <div> 
     <h2><ol>{this.state.movieName}</ol></h2> 
     </div> 
    ); 
    } 
} 

입니다 이 :

+0

당신은 redux 필요가 없습니다. 당신이 할 수있는 가장 기본적인 일은'ListingService'가 렌더링하는 것에서 다른 컴포넌트를 만든 다음 그 상태를 새로운 컴포넌트로 전달합니다. 네가 묻는 것이 아닌가? – azium

답변

1

MovieList 구성 요소를 만드는 것이 가장 좋을 것입니다. ListService에서 영화의 소품을 전달할 수 있습니다.

<MovieList movies={this.state.movieName} 

오히려 jsx와 같은 Ajax 호출에 영화 이름을 저장하는 것보다, 그냥 배열에 문자열로 저장합니다. 당신의 MovieList 구성 요소에서

, 영화

const MovieList = props => (props.movies.map((movie,i) => (<ol><li key={i} >{movie.title}</li></ol>)) 

이 기본 구현의 배열을 통해지도,하지만 당신은 그래서 당신이 ID를 저장할 수있는 객체 영화의 목록을 만들기 위해 그것을 확장 할 수와 키를 만들 좀더 구체적으로.

+0

고마워요. 아직도 저는 ListService를 호출하는 상위 구성 요소를 가지고 있습니다. threre가이 아버지 구성 요소를 사용하여 영화 목록을 표시 할 수있는 방법이라면 나는 생각하고있었습니다. 그것은 의미가 있습니까? – peterK

+1

궁극적으로 Listing to List Service가 될 것입니다. 스마트 구성 요소는 모든 논리를 보유하고 프레젠테이션 구성 요소는 논리를 표시하는 하위 노드입니다. 그래서 리스팅 서비스가 똑똑해, MovieList는 프리젠 테이션 하위입니다 –

+0

감사합니다, 훌륭한 설명 :) 알았어요. – peterK