개발

graphql+react 변수를 가지고 Mutation 실행하기

덤벨로퍼 2020. 2. 26. 20:46

 

const mutation = gql`
    mutation AddSong($title:String){
        addSong(title:$title){
            title
        }
    }
`;

export default graphql(mutation)(SongCreate);

 

 

지난번 쿼리 처럼 react-apollo의 graphql 함수를 활용해 mutation문을 사용해 Songcreate 라는 컴포넌트에 

연결시켰다.  문제는 별개인 컴포넌트(SongCreate) 와 mutation 쿼리 둘사이에서 

컴포넌트가 mutation에게 title이라는 변수를 줘야한다는것이다.

 

 

우선 이렇게 되면 컴포넌트의 this.props에 mutate 라는 함수가 prop에 생긴다

이 mutate를 사용해서 별개인 컴포넌트와 mutation 쿼리 사이에 연결이 가능해져

변수를 줄수가있어진다.

 this.props.mutate({
            variables:{
                title:this.state.title
            }
           
        });

또한 해당 mutation을 실행시켜 서버와 작용한다.

mutation은 서버와 작용후에 결과값을 리턴한다. true false 든 어떤 데이터든 혹은 에러가 발생시 에러가 리턴될것이다.

이를 then 을 활용하면 가능 하다

this.props.mutate({
            variables:{
                title:this.state.title
            }
           
        }).then((data)=>{
            console.log(data);
            hashHistory.push('/');
        });

그럼 만약 한 컴포넌트에서 mutation과 쿼리를 동시에 사용하려면 어떻게할까?

SongList 라는 컴포넌트는 song 들을 쿼리하고 동시에 삭제할수있는 기능 이 필요하다

const mutation = gql`
    mutation deleteSong($id:String){
        deleteSong(id:$id){
            id
            title
        }
    }
`;




export default graphql(mutation)(
graphql(query)(SongList));

다음과같이 이상한 형태로 뮤테이션,쿼리를 같이 할수있다.