• 로그인
  • 장바구니에 상품이 없습니다.

home2 게시판 React 게시판 redux state 변경 질문

redux state 변경 질문

10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 글쓴이
  • #114146

    황승현
    참가자
    개인 프로젝트 만들고 있습니다. redux에서 2차원 array state변경함수를 쓰려는데 배열에서 몇번째를 수정하고 싶은지 계속 바뀌는 상황이라 변경함수에 몇번째를 지정하는 파라미터를 추가하고 싶은데 어떻게 코드를 짜야 하나요?
    #114154

    codingapple
    키 마스터
    dispatch()쓸 때 몇번째를 수정할지도 소괄호 안에 같이 보내면 될듯요
    #114173

    황승현
    참가자
    redux 변수 저장해놓은 store.js에 있는 2차원 배열입니다. 여기서 dispatch를 어떻게 사용해야 하는지 모르겠습니다. 
    
    let 바둑판 = createSlice({
      name: "바둑판",
      initialState: [
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], ["black-border"], [0], [0], [0]],
        [[0], [0], [0], ["black"], ["white"], ["black-border"], [0], [0]],
        [[0], [0], ["black-border"], ["white"], ["black"], [0], [0], [0]],
        [[0], [0], [0], ["black-border"], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
      ],
      reducers: {
        바둑판변경(state, action) {/*바둑판[i][j]의 자료를 파라미터를 받아서 변경하고 싶음*/},
      },
    });
    
    #114204

    codingapple
    키 마스터
    행과 열 2개 정보 전달하면 될거같은데 그걸 array같은데 담아서 dispatch(변경함수(array)) 합시다
     
    #114217

    황승현
    참가자
    let 바둑판 = createSlice({
      name: "바둑판",
      initialState: [
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], ["black-border"], [0], [0], [0]],
        [[0], [0], [0], ["black"], ["white"], ["black-border"], [0], [0]],
        [[0], [0], ["black-border"], ["white"], ["black"], [0], [0], [0]],
        [[0], [0], [0], ["black-border"], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
        [[0], [0], [0], [0], [0], [0], [0], [0]],
      ],
      reducers: {
        바둑판변경(state, action) {
          state[action[0]][action[1]] = action[2];
        },
      },
    });
    
     
    function Stone(props) {
      let dispatch = useDispatch();
      return (
        <div
          className="background"
          onClick={() => {
            dispatch(바둑판변경([props.i, props.j, "black"]));
          }}
        >
          <div className={`circle ${props.바둑판}`}></div>
        </div>
      );
    }
    
    
    stone은 하위 컴포넌트이고 i, j를 props로 전송했습니다. Cannot set properties of undefined (setting 'undefined')라는 에러가 dispatch(바둑판변경([props.i, props.j, "black"]));에서 나오는데 어떤게 문제인지 모르겠습니다.
    #114219

    황승현
    참가자
    state[action.payload[0]][action.payload[1]] = action.payload[2]; 로 바꾸니까 해결됬네요. array로 담아서 전송하는게 핵심이였네요. 감사합니다.
    #114223

    황승현
    참가자
    보드게임에서 번갈아가며 차례를 정하는 변수를 만들었는데요, 1과 2가 번갈아가며 나오게 했는데 왜인지 안되네요
    
    let 누구차례냐 = createSlice({
      name: "누구차례냐",
      initialState: 1,
      reducers: {
        차례변경(state) {
          if (state == 1) {
            return 2;
          } else if (state == 2) {
            return 1;
          }
        },
      },
    });
    요게 store.js에 있는 코드고,
     
      return (
        <div
          className="background"
          onClick={() => {
            if (누구차례냐 == 1) {
              dispatch(바둑판변경([props.i, props.j, "black"]));
              차례변경();
              console.log(누구차례냐);
            } else if(누구차례냐 == 2){
              dispatch(바둑판변경([props.i, props.j, "white"]));
              차례변경();
            }
          }}
        >
          <div className={`circle ${바둑판[props.i][props.j]}`}></div>
        </div>
      );
    요게 컴포넌트입니다. console.log로 클릭할때마다 출력해봤는데 1만 나와요. 제가 어떤걸 잘못한걸까요?
    
    
    
    
    #114234

    codingapple
    키 마스터
    차례변경 함수 정의 안에서 출력해보면 잘 변경되고 있을 수도 있습니다
    #114388

    황승현
    참가자
    똑같은 컴포넌트가 64개 연달아 놓여있습니다. 이게 제가 원하는대로 작동하지 않는 이유가 될까요?
    #114389

    황승현
    참가자
    차례변경 함수를 dispatch로 안 감싸서 생긴 문제였네요. 나는 바보입니다.
10 글 보임 - 1 에서 10 까지 (총 10 중에서)
  • 답변은 로그인 후 가능합니다.

About

현재 월 700명 신규수강중입니다.

  (09:00~20:00) 빠른 상담은 카톡 플러스친구 코딩애플 (링크)
  admin@codingapple.com
  이용약관, 개인정보처리방침
ⓒ Codingapple, 강의 예제, 영상 복제 금지
top

© Codingapple, All rights reserved. 슈퍼로켓 에듀케이션 / 서울특별시 강동구 고덕로 19길 30 / 사업자등록번호 : 212-26-14752 온라인 교육학원업 / 통신판매업신고번호 : 제 2017-서울강동-0002 호 / 개인정보관리자 : 박종흠