안녕하세요 스타트업에서 프론트엔드 개발자로 일하고있는 Marcus입니다.

라이엇 key를 발급받으셨다고 생각하고 포스팅을 진행하겠습니다.

먼저 이번 토이 프로젝트에서 사용할 기술 스택은 다음과 같습니다.

Javascript, JSEs6, react, redux, saga, sass
위와 같은 기술 스택을 사용하여 개발을 할 예정입니다.

이번 포스팅에서는 유저 네임을 검색하는 SearchVBar를 만들어봅시다!

Redux, saga의 적용 방법은 vleopert님께서 정리한 포스팅이 있으니 그걸 참고하시면 될 것 같습니다.

먼저 들어가기 전에
여러분들이 받은 api_key를 모듈화 해주는 작업을 진행하겠습니다.

API_KEY 모듈화

config/api_key.js
export const api_key = 'RGAPI-APIKEY';

생각보다 쉽습니다.
위 파일을 만들어주신다음에 사용하시는 부분에서 import해주면 쉽게 사용하실 수 있습니다:D

컴포넌트 레이아웃 부분

return (
      <div className={styles.container}>
        <img
          src={require("images/Home_img.png")}
          className={styles.logo}
          alt="logo"
        />
        <form className={styles.summoner_form} onSubmit={this.searchSummoner}>
          <input
            className={styles.summoner_search}
            type="text"
            value={this.state.summonerName}
            onChange={this.handleInputChange}
          />
          <button className={styles.summoner_search_btn}>.GG </button>
        </form>
      </div>
    );

먼저 위와 같이 검색창에 대한 레이아웃을 잡아주었습니다.

스크린샷 2019-01-09 오전 10.40.26.png

Input Box에 소환사 이름을 적고 버튼을 클릭하면 소환사에 대한 간단한 정보를 여러분들이 얻을 수 있습니다!!

자 이제 그럼 안에 들어가는 api와 액션들을 볼까요?

검색창에서 사용되는 api는 다음과 같습니다.

api 부분

export const getSummonerInfo = summonerName => {
  return axios.get(
    `https://kr.api.riotgames.com/lol/summoner/v4/summoners/by-name/${summonerName}?api_key=${api_key}`
  );
};

summonerName인자는 여러분들이 inputbox에 입력한 이름이 인자로 들어가게됩니다.
처음에 말씀드린 api_key를 import해서 사용해주세요.

저는 이 부분을 따로 component에서 불러주지 않고 action,reducer,saga를 통해 불러줍니다.

saga 부분

export function* getSummoner(actions) {
    const { summonerName } = actions
    yield put(getSummonerRequest());
    try {
    const summonerInfo = yield call(getSummonerInfo, summonerName);
    yield put(getSummonerSuccess(summonerInfo.data));
  } catch (error) {
    console.log('error:', error)
    yield put(getSummonerFailure(error));
  }
}

export function* watchgetSummonerInfo() {
  yield takeEvery(GET_SUMMONER, getSummoner);
}

위 플로우를 보면 GET_SUMMONER라는 액션이 실행되면 takeEvery를 이용해 watch하고 있던 getSummoner가 실행됩니다.

받아온 action을 저장하고 있다가 yield call을 사용하여 위에 API에 action으로 넘어온 인자를 보내주는 방식으로 구현을 했고 api에서 받아온 return값을
getSummonerSuccess에 저장해주면서 성공적으로 store에 저장되는 모습을 볼 수 있습니다.

redux devtools로 확인하면 성공적으로 데이터를 받아온걸 확인하실 수 있습니다.
다음 포스팅에서는 받아온 id, accountId를 활용해서 다른 데이터도 불러오는 작업을 진행하겠습니다.
스크린샷 2019-01-09 오전 10.51.23.png

감사합니다:D

GitHub
https://github.com/Jogeonsang/op.gg