Quando tento alterar o estilo de Visualização, alterando o estado. não vai responder. Tens alguma ideia do porquê?
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;
Não tenho certeza se isso vai consertar as coisas, mas tente mudar a primeira linha em responderMove para var style = {...this.state.style};
para que você crie um novo objeto e deixe claro que a nova Visualização na segunda passagem de renderização tem um estilo diferente do primeiro .
Não tenho 100% de certeza, pois não testei, mas você parece ter dois backgroundColors, um em seu "estilo var" e outro em "this.state" e acho que você está misturando-os. Você deve decidir se deseja que o backgroundColor seja salvo aqui ou ali e, respectivamente, definir o valor correto em seu método responderMove.
Aqui está!
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
}
Muitos problemas com variáveis, verifique meu código acima para ver onde você errou :) A propósito, esse tipo de pergunta é mais adequado para StackOverflow!
Comentários muito úteis
Não tenho certeza se isso vai consertar as coisas, mas tente mudar a primeira linha em responderMove para
var style = {...this.state.style};
para que você crie um novo objeto e deixe claro que a nova Visualização na segunda passagem de renderização tem um estilo diferente do primeiro .