React-native: ๋ณด๊ธฐ: ์Šคํƒ€์ผ์ด setState๋กœ ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์Œ

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

์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ณด๊ธฐ ์Šคํƒ€์ผ์„ ๋ณ€๊ฒฝํ•˜๋ ค๊ณ  ํ•  ๋•Œ. ์‘๋‹ตํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด์œ ๊ฐ€ ๋ญ”์ง€ ์•„์„ธ์š”?

var React = require('react-native');

var { View, Text} = React;

var TouchIt = React.createClass({

  getInitialState() {
    return {
      style: style
    }
  },

  shouldSetResponder() {
    return true;
  },

  shouldSetMoveResponder() {
    return true;
  },

  responderGrant() {
    console.log('finger in');
  },

  responderMove() {
    var style = this.state.style;
    style.backgroundColor = this.getRandomColor();
    this.setState({backgroundColor: backgroundColor});
  },

  responderRelease() {
    console.log('finger out');
  },

  getRandomColor() {
    var randomColor = '#'+Math.random().toString(16).substr(-6);
    return randomColor;
  },

  render() {

    return (
        <View style={this.state.style}
          onStartShouldSetResponder={this.shouldSetResponder}
          onMoveShouldSetResponder={this.shouldSetMoveResponder}
          onResponderGrant={this.responderGrant}
          onResponderMove={this.responderMove}
          onResponderRelease={this.responderRelease}
          >
          <Text>{this.style.backgroundColor}</Text>
        </View>
    );
  }

});

var style = {
  backgroundColor: 'rgb(11, 135, 91)',
  flex: 1
}

module.exports = TouchIt;

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

์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ responderMove์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ var style = {...this.state.style}; ํ•˜์—ฌ ์ƒˆ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋‘ ๋ฒˆ์งธ ๋ Œ๋” ํŒจ์Šค์˜ ์ƒˆ View๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์ž„์„ ๋ถ„๋ช…ํžˆ ํ•˜์‹ญ์‹œ์˜ค. .

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

์ด๊ฒƒ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ• ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ responderMove์˜ ์ฒซ ๋ฒˆ์งธ ์ค„์„ var style = {...this.state.style}; ํ•˜์—ฌ ์ƒˆ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๊ณ  ๋‘ ๋ฒˆ์งธ ๋ Œ๋” ํŒจ์Šค์˜ ์ƒˆ View๊ฐ€ ์ฒซ ๋ฒˆ์งธ ๊ฒƒ๊ณผ ๋‹ค๋ฅธ ์Šคํƒ€์ผ์ž„์„ ๋ถ„๋ช…ํžˆ ํ•˜์‹ญ์‹œ์˜ค. .

๋‚ด๊ฐ€ ํ…Œ์ŠคํŠธํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— 100% ํ™•์‹ ํ•  ์ˆ˜๋Š” ์—†์ง€๋งŒ "var ์Šคํƒ€์ผ"์— ํ•˜๋‚˜์™€ "this.state"์— ํ•˜๋‚˜์˜ backgroundColors๊ฐ€ ์žˆ๋Š” ๊ฒƒ ๊ฐ™์œผ๋ฉฐ ๊ทธ๊ฒƒ๋“ค์„ ์„ž๊ณ  ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. backgroundColor๋ฅผ ์—ฌ๊ธฐ์— ์ €์žฅํ• ์ง€ ์•„๋‹ˆ๋ฉด ๊ฑฐ๊ธฐ์— ์ €์žฅํ• ์ง€ ๊ฒฐ์ •ํ•˜๊ณ  ๊ฐ๊ฐ responderMove ๋ฉ”์†Œ๋“œ์—์„œ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ž!

var React = require('react-native');

var {
  AppRegistry,
  Image,
  ScrollView,
  StyleSheet,
  Text,
  View,
} = React;

var ExampleApp = React.createClass({

  getInitialState() {
    return {
      style: style
    }
  },

  shouldSetResponder() {
    return true;
  },

  shouldSetMoveResponder() {
    return true;
  },

  responderGrant() {
    console.log('finger in');
  },

  responderMove() {
    var backgroundColor = this.getRandomColor();
    this.setState({style: {backgroundColor}});
  },

  responderRelease() {
    console.log('finger out');
  },

  getRandomColor() {
    var randomColor = '#'+Math.random().toString(16).substr(-6);
    return randomColor;
  },

  render() {

    return (
        <View style={[{flex: 1}, this.state.style]}
          onStartShouldSetResponder={this.shouldSetResponder}
          onMoveShouldSetResponder={this.shouldSetMoveResponder}
          onResponderGrant={this.responderGrant}
          onResponderMove={this.responderMove}
          onResponderRelease={this.responderRelease}
          >
          <Text>{this.state.style.backgroundColor}</Text>
        </View>
    );
  }

});

var style = {
  backgroundColor: 'rgb(11, 135, 91)',
  flex: 1
}

๋ณ€์ˆ˜์— ๋Œ€ํ•œ ๋งŽ์€ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ์ฝ”๋“œ๋ฅผ ํ™•์ธํ•˜์—ฌ ์–ด๋””๊ฐ€ ์ž˜๋ชป๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜์„ธ์š” :) ๊ทธ๋Ÿฐ๋ฐ ์ด๋Ÿฐ ์ข…๋ฅ˜์˜ ์งˆ๋ฌธ์€ StackOverflow์— ๋” ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค!

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