React-native: `rowHasChanged` рдФрд░ ListView рд░реЗрдВрдбрд░рд┐рдВрдЧ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреНрд░рдо

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рдлрд╝рд░ре░ 2016  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react-native

рд╕рднреА рдХреЛ рдкреНрд░рдгрд╛рдо,

рдХреБрдЫ рдкреНрд░рджрд░реНрд╢рди рд╕реБрдзрд╛рд░реЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рдореИрдВрдиреЗ рдкрд╛рдпрд╛ рдХрд┐ rowHasChanged рдХреЛ рд╣рдорд╛рд░реА рдХрд┐рд╕реА рднреА рд╕реВрдЪреА рдореЗрдВ рдирд╣реАрдВ рдмреБрд▓рд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпреЗ рд╕реВрдЪрд┐рдпрд╛рдВ рдЕрдирдВрдд-рд╕реНрдХреНрд░реЙрд▓рд┐рдВрдЧ рд╕реВрдЪрд┐рдпрд╛рдВ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдЕрдВрдд рддрдХ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗ, рддреЛ рдпрд╣ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдЕрдзрд┐рдХ рдЖрдЗрдЯрдо рд▓рд╛рдПрдЧрд╛ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рд╕реВрдЪреА рдореЗрдВ рдбрдВрдк рдХрд░ рджреЗрдЧрд╛ред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рднреА рд╣рдо рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рдХреА рд╕рд╛рдордЧреНрд░реА рдмрджрд▓рддреЗ рд╣реИрдВ рддреЛ рд╕реВрдЪреА рдореЗрдВ рд╕рднреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рддреА рд╣реИрдВред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ 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ред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ;)

рддреЛ рдЬрд┐рд╕реНрдЯ рд╕реЗ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛:

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

рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдШреБрд╕ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ DataSource рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдкрд░ рдЕрдзрд┐рдХ рдЬреЛрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдЕрд░реЗ рдЬрдирдореЛрдВрд╢рдХреЗ, рдЗрд╕ рдореБрджреНрджреЗ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рд╢рд╛рдпрдж рд╕реБрдирд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд▓реЛрдХрдкреНрд░рд┐рдп рд╣реЛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╕рдЪреНрдЪрд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреА рдЧрддрд┐рд╡рд┐рдзрд┐ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрднрд┐рднреВрдд рд╣реЛ рд░рд╣реЗ рд╣реИрдВред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдареАрдХ рд╕реЗ рдкреНрд░рдмрдВрдзрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреА рдмрд╣реБрдд рд╕рд╛рд░реЗ рдореБрджреНрджреЗ рд╣реИрдВред

  • рдпрджрд┐ рдЖрдк рдирд╣реАрдВ рдЬрд╛рдирддреЗ рдХрд┐ рдХреБрдЫ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ рдпрд╛ рдХреБрдЫ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдмрдЧ рд╣реИ , рддреЛ рдХреГрдкрдпрд╛ StackOverflow рдкрд░ react-native рдЯреИрдЧ рдХреЗ рд╕рд╛рде рдкреВрдЫреЗрдВ рдпрд╛ рдЕрдзрд┐рдХ рд░реАрдпрд▓ рдЯрд╛рдЗрдо рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рд▓рд┐рдП, рдбрд┐рд╕реНрдХреЙрд░реНрдб рдкрд░ рдкреВрдЫреЗрдВ #рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛-рдореВрд▓ рдЪреИрдирд▓ред
  • рдпрджрд┐ рдпрд╣ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рдЕрдиреБрд░реЛрдз рдпрд╛ рдПрдХ рдмрдЧ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдареАрдХ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдХреГрдкрдпрд╛ рдЙрддреНрдкрд╛рдж рджрд░реНрдж рдкрд░ рдЗрд╕рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдВред рдЗрд╕рдореЗрдВ рдПрдХ рд░реИрдВрдХрд┐рдВрдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ рдЬреЛ рд╣рдореЗрдВ рд╕рдореБрджрд╛рдп рдХреЗ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рджреЗрддреА рд╣реИред
  • рд╣рдо рд╕реНрдкрд╖реНрдЯ рдореБрджреНрджреЛрдВ рдФрд░ рдкреАрдЖрд░ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЧрд╣рди рдЪрд░реНрдЪрд╛ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВред рдХреГрдкрдпрд╛ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЙрдкрдпреБрдХреНрдд рд╣реЛ рдФрд░ рд╣рдореЗрд╢рд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рд░рд┐рдПрдХреНрдЯ рдиреЗрдЯрд┐рд╡ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВред рдЖрдкрдХреЗ рдпреЛрдЧрджрд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

рдареАрдХ рд╣реИ, рдЗрд╕рдореЗрдВ рд╕рдорд╛рдзрд╛рди рдорд┐рд▓рд╛: http://stackoverflow.com/a/33871118ред

рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рд╣реА рдбреЗрдЯрд╛рд╕реЛрд░реНрд╕ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реЗ рдХреНрд▓реЛрди рдХрд░рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ;)

рддреЛ рдЬрд┐рд╕реНрдЯ рд╕реЗ рдХреЛрдб рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛:

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

рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рдЖрдкрдХреЗ рдХреЛрдбрдмреЗрд╕ рдореЗрдВ рдШреБрд╕ рд░рд╣реА рд╣реИред рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ DataSource рдХреЗ рд╕рд╣реА рдЙрдкрдпреЛрдЧ рдкрд░ рдЕрдзрд┐рдХ рдЬреЛрд░ рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдзрдиреНрдпрд╡рд╛рдж @janmonschke! рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рдореЗрд░реЗ рдкрд╛рд╕ рд▓рдЧрд╛рддрд╛рд░ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рдПрдХ рд╕рдореВрд╣ рдерд╛ рдФрд░ рдореИрдВ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭ рд╕рдХрд╛ рдХрд┐ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд╣реЛ рд░рд╣рд╛ рдерд╛ рдФрд░ рдХреНрдпреЛрдВ rowHasChanged рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрднреА рднреА рдХреЙрд▓ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рдерд╛ред рдореИрдВ

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

despairblue picture despairblue  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

grabbou picture grabbou  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

upbit picture upbit  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

jlongster picture jlongster  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

TrakBit picture TrakBit  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ