当我尝试通过更改状态来更改视图样式时。 它不会响应。 你知道为什么吗?
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};
以便您创建一个新对象并明确第二次渲染过程中的新视图与第一个具有不同的样式.
不是 100% 确定,因为我还没有测试过,但你似乎有两种 backgroundColors,一种在你的“var style”中,另一个在“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};
以便您创建一个新对象并明确第二次渲染过程中的新视图与第一个具有不同的样式.