状態を変えてビュースタイルを変えようとすると。 応答しません。 理由はわかりますか?
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};
に変更して、新しいオブジェクトを作成し、2番目のレンダリングパスの新しいビューのスタイルが最初のビューとは異なることを明確にしてみてください。
テストしていないので100%確実ではありませんが、2つのbackgroundColorがあります。1つは「varstyle」で、もう1つは「this.state」であり、それらを混同していると思います。 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に適しています。
最も参考になるコメント
これで問題が解決するかどうかはわかりませんが、responderMoveの最初の行を
var style = {...this.state.style};
に変更して、新しいオブジェクトを作成し、2番目のレンダリングパスの新しいビューのスタイルが最初のビューとは異なることを明確にしてみてください。