React-native: `rowHasChanged` ๋ฐ ListView ๋ Œ๋”๋ง์— ๋Œ€ํ•œ ํ˜ผ๋™

์— ๋งŒ๋“  2016๋…„ 02์›” 04์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: facebook/react-native

๋ชจ๋‘ ์•ˆ๋…•,

๋ช‡ ๊ฐ€์ง€ ์„ฑ๋Šฅ ๊ฐœ์„  ์ž‘์—…์„ ํ•˜๋Š” ๋™์•ˆ ๋ชฉ๋ก์—์„œ rowHasChanged ๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜์Šต๋‹ˆ๋‹ค. ์ด ๋ชฉ๋ก์€ ๋ฌดํ•œ ์Šคํฌ๋กค ๋ชฉ๋ก์ž…๋‹ˆ๋‹ค. ์ฆ‰, ๋์— ๋„๋‹ฌํ•˜๋ฉด ํ‘œ์‹œํ•  ๋” ๋งŽ์€ ํ•ญ๋ชฉ์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ๋ชฉ๋ก์— ๋คํ”„ํ•ฉ๋‹ˆ๋‹ค.

DataSource์˜ ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•  ๋•Œ๋งˆ๋‹ค ๋ชฉ๋ก์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์ด ์—…๋ฐ์ดํŠธ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ํ–‰์— ๋Œ€ํ•ด shouldComponentUpdate ๊ฐ€ ์žˆ์ง€๋งŒ rowHasChanged ์—์„œ ์ดํ•ดํ•œ ๋Œ€๋กœ ์ด ํ–‰์€ ๋‹ค์‹œ ๋ Œ๋”๋งํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๋ชฉ๋ก์— ํ•ญ๋ชฉ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ์ฃผ๋Š” ๊ฐ„๋‹จํ•œ ์˜ˆ๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. https://gist.github.com/janmonschke/c9c84b6050683da0c64f

์šฐ๋ฆฌ๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ํ•˜๋Š” ์ผ์€:

constructor() {
  // (...)
  this.ds = new ListView.DataSource({rowHasChanged: (r1, r2) => {
    console.log('rowHasChanged');
    return r1 !== r2;
  }});
  // (...)
}

onEndReached = () => {
  // append data to the end
  setData = [...setData, ...genRandomSet()];
  this.setState({
    dataSource: this.ds.cloneWithRows(setData)
  });
  console.log('onEndReached');
};

render() {
  return (
    <ListView
      dataSource={this.state.dataSource}
      renderRow={this.renderRow}
      onEndReached={this.onEndReached}
    />
  );
}

๊ทธ๋Ÿฌ๋‚˜ rowHasChanged ๋Š” ๊ธฐ๋ก๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์–ด๋–ป๊ฒŒ ๋“  ์ž˜๋ชป๋œ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ? ListView์— ์ถ”๊ฐ€ํ•˜๋Š” ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๊นŒ?

0.18.0 ๋ฐ 0.19.0 ์—์„œ ๋™์ผํ•œ ๋™์ž‘

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์ข‹์Šต๋‹ˆ๋‹ค. http://stackoverflow.com/a/33871118์—์„œ ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์˜ฌ๋ฐ”๋ฅธ DataSource ์ธ์Šคํ„ด์Šค์—์„œ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.)

๋”ฐ๋ผ์„œ ์š”์ ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  setData = [...setData, ...genRandomSet()];
  this.setState({
    dataSource: this.state.dataSource.cloneWithRows(setData)
  });

์ด๊ฒƒ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์‰ฝ๊ฒŒ ์Šค๋ฉฐ๋“œ๋Š” ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ DataSource ์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์„ ๋” ๊ฐ•์กฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  3 ๋Œ“๊ธ€

janmonschke๋‹˜, ์ด ๋ฌธ์ œ๋ฅผ ์‹ ๊ณ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

๋ฆฌ์•กํŠธ ๋„ค์ดํ‹ฐ๋ธŒ(React Native)๋Š” ์•„๋งˆ ๋“ค์–ด๋ณด์…จ์„ ํ…๋ฐ, ์ •๋ง ์ธ๊ธฐ๋ฅผ ์–ป๊ณ  ์žˆ์œผ๋ฉฐ ์‚ฌ์‹ค ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ๋‘˜๋Ÿฌ์‹ผ ํ™œ๋™์— ์••๋„๋‹นํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ œ๋Œ€๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ์—๋Š” ๋ฌธ์ œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์Šต๋‹ˆ๋‹ค.

  • ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ์ง€ ๋ชจ๋ฅด๊ฒ  ๊ฑฐ๋‚˜ ๋ญ”๊ฐ€๊ฐ€ ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์ง€๋งŒ ๋ฒ„๊ทธ์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ react-native ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ StackOverflow ์— ๋ฌธ์˜ํ•˜๊ฑฐ๋‚˜ ๋” ๋งŽ์€ ์‹ค์‹œ๊ฐ„ ์ƒํ˜ธ ์ž‘์šฉ์„ ์›ํ•˜๋ฉด Discord ์— ๋ฌธ์˜ํ•˜์‹ญ์‹œ์˜ค. #react ๋„ค์ดํ‹ฐ๋ธŒ ์ฑ„๋„์ž…๋‹ˆ๋‹ค.
  • ์ด๊ฒƒ์ด ๊ธฐ๋Šฅ ์š”์ฒญ์ด๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๊ณ  ์‹ถ์€ ๋ฒ„๊ทธ ์ธ ๊ฒฝ์šฐ Product Pains ์— ๋ณด๊ณ ํ•˜์‹ญ์‹œ์˜ค. ์ปค๋ฎค๋‹ˆํ‹ฐ๊ฐ€ ๊ฒช๊ณ  ์žˆ๋Š” ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ฌธ์ œ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆœ์œ„ ์ง€์ • ๊ธฐ๋Šฅ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์‹ฌ๋„ ์žˆ๋Š” ๋…ผ์˜๊ฐ€ ๊ฐ€๋Šฅํ•œ ๋ช…ํ™•ํ•œ ์ด์Šˆ์™€ PR์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ์ ์ ˆํ•œ ๊ฒฝ์šฐ ์Šคํฌ๋ฆฐ์ƒท ์„ ์ œ๊ณตํ•˜๊ณ  ํ•ญ์ƒ ์‚ฌ์šฉ ์ค‘์ธ React Native ๋ฒ„์ „ ์„ ์–ธ๊ธ‰ํ•˜์„ธ์š”. ๊ท€ํ•˜์˜ ๊ธฐ์—ฌ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์ข‹์Šต๋‹ˆ๋‹ค. http://stackoverflow.com/a/33871118์—์„œ ์†”๋ฃจ์…˜์„ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค.

๋ถ„๋ช…ํžˆ ์˜ฌ๋ฐ”๋ฅธ DataSource ์ธ์Šคํ„ด์Šค์—์„œ ๋ณต์ œํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.)

๋”ฐ๋ผ์„œ ์š”์ ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  setData = [...setData, ...genRandomSet()];
  this.setState({
    dataSource: this.state.dataSource.cloneWithRows(setData)
  });

์ด๊ฒƒ์€ ์ฝ”๋“œ๋ฒ ์ด์Šค์— ์‰ฝ๊ฒŒ ์Šค๋ฉฐ๋“œ๋Š” ์˜ค๋ฅ˜์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ๋ฌธ์„œ์—์„œ DataSource ์˜ ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ๋ฒ•์„ ๋” ๊ฐ•์กฐํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@janmonschke ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค! ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๊ณ„์†ํ•ด์„œ ๋‹ค์‹œ ๋ Œ๋”๋ง๋˜๋Š” ๋งŽ์€ ๋ทฐ๊ฐ€ ์žˆ์—ˆ๊ณ  ์™œ ๊ทธ๋Ÿฐ ์ผ์ด ์ผ์–ด๋‚˜๊ณ  rowHasChanged ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ๐Ÿ‘Š

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰