! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

MultiSelect 컨트롤 event 내에서 state값이 일치하지 않습니다 > Q&A | 토론

본문 바로가기

Wijmo

Q&A | 토론

ReactJS MultiSelect 컨트롤 event 내에서 state값이 일치하지 않습니다

페이지 정보

작성자 서울야수킹 작성일 2022-02-26 17:21 조회 2,518회 댓글 0건
제품 버전 : 5.20211.781
컨트롤 이름 : Input.MultiSelect

본문

저희는 hook 방식을 사용하고 있습니다


MultiSelect 컨트롤의 onChange 이벤트 내에서 state value가 일치하지 않는 상황입니다


https://demo.grapecity.co.kr/wijmo/learn-wijmo/Input/MultiSelect/Overview/react 에서 


코드를 테스트해 보아도 동일한 상황입니다. class 방식에서는 재현되지 않고요


위 페이지 내에서 아래 코드 그대로 붙여넣고 확인한 바 로그에 test state는 계속 false 상태를 유지하고 있습니다.







import "bootstrap.css";
import "@grapecity/wijmo.styles/wijmo.css";
import "./app.css";
//
import * as React from "react";
import { useState } from "react";
import * as ReactDOM from "react-dom";
import * as wjInput from "@grapecity/wijmo.react.input";
import { getData } from "./data";
//
function App() {
  const [data, setData] = useState(getData());

  const [showSelectAllCheckbox, setShowSelectAllCheckbox] = useState(false);
  const [showFilterInput, setShowFilterInput] = useState(false);
  const [test, setTest] = useState(false);
  const [checkedItems, setCheckedItems] = useState([]);

  const onCheckedItemsChanged = (sender) => {
    console.log("test", test);
    setCheckedItems(sender.checkedItems);
  };
  const changeShowSelectAll = (event) => {
    setShowSelectAllCheckbox(event.target.checked);
  };
  const changeShowFilterInput = (event) => {
    setShowFilterInput(event.target.checked);
  };
  const changeTest = (event) => {
    setTest(event.target.checked);
  };

  return (
    <div className="container-fluid">
      <div className="row">
        <div className="col-xs-5">
          <div className="form-group">
            <wjInput.MultiSelect
              placeholder="Countries"
              headerFormat="{count:n0} countries"
              displayMemberPath="country"
              showSelectAllCheckbox={showSelectAllCheckbox}
              showFilterInput={showFilterInput}
              itemsSource={data}
              checkedItemsChanged={onCheckedItemsChanged}
            ></wjInput.MultiSelect>
          </div>
          <div className="form-group">
            <label>
              Show "Select All" box
              <input
                id="selectAll"
                type="checkbox"
                checked={showSelectAllCheckbox}
                onChange={changeShowSelectAll}
              />
            </label>
          </div>
          <div className="form-group">
            <label>
              Show "Filter" input
              <input
                id="filter"
                type="checkbox"
                checked={showFilterInput}
                onChange={changeShowFilterInput}
              />
            </label>
          </div>
          <div className="form-group">
            <label>
              Test
              <input
                id="test"
                type="checkbox"
                checked={test}
                onChange={changeTest}
              />
            </label>
          </div>
        </div>
        <div className="col-xs-7">
          <p>
            <b>Test State: {`${test}`}</b>
          </p>
          <p>
            <b>Checked Items:</b>
          </p>
          <ul>
            {checkedItems.map((item, index) => {
              return <li key={index}>{item.country}</li>;
            })}
          </ul>
        </div>
      </div>
    </div>
  );
}

ReactDOM.render(<App />, document.getElementById("app"));
  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

ReactJS Re: MultiSelect 컨트롤 event 내에서 state값이 일치하지 않습니다

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 GCK루시 작성일 2022-02-28 13:28 댓글 0건

본문

안녕하세요 그레이프시티입니다.


문의 주신 'useState 값이 Wijmo 컨트롤 이벤트 내에서 업데이트 되지 않는 이슈'에 대해서 답변 드립니다.

해당 이슈의 경우, MultiSelect 컨트롤의 이벤트 리스너내에서 상태 값이 false인 상태로 추가된 후, 리스너가 닫혔기 때문에 업데이트된 값을 이벤트 리스너 안에서 사용할 수 없어 발생된 것을 추측됩니다. 이슈를 해결하기 위해서는 useRef를 이용하여 현재 상태 값을 가져와서 사용하는 것이 가장 일반적인 방법이며 아래 간단한 샘플을 공유 드리오니 참고 부탁 드립니다.




다른 궁금한 점이 생기면, 문의 주시기 바랍니다.


감사합니다. 

그레이프시티 드림


* 그레이프시티(GrapeCity)는 개발자를 위하여 ComponentOne(컴포넌트원), Spread(스프레드), ActiveReports(액티브리포츠), SpreadJS(스프레드JS), Wijmo(위즈모)와 같은 엑셀 스프레드시트 리포팅 그리드와 차트 등 다양한 종류의 .NET JavaScript(자바스크립트) 컴포넌트 툴을 생산하고있는 개발툴 전문 회사 입니다.

댓글목록

등록된 댓글이 없습니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.