下面是轮播图,图片盒子里组件。
var ImgBox = React.createClass({
componentDidMount: function(){
console.log(typeof this.state.left);
},
getInitialState : function(){
return {
current:0 ,//当前下标,和left定位有直接关系
disX: 0,
startX: 0,
left:"0"
};
},
handleTouchStart : function(e){
var offLeft = this.refs.imgBox.offsetLeft;
console.log(offLeft);
e.preventDefault();
this.setState({
startX: e.touches[0].pageX,
disX: this.state.startX - offLeft,
left: this.state.startX - this.state.left
});
},
handleTouchMove : function(e){
e.preventDefault();
this.setState({
left: e.touches[0].pageX - this.state.disX+"px"
})
},
handleTouchEnd: function(e){
if(e.changedTouches[0].pageX<this.state.startX){
this.setState({current:this.state.current+1});
}
if(e.changedTouches[0].pageX>this.state.startX){
this.setState({current:this.state.current-1});
}
this.setState({
left:(this.state.current)*-1+"00%"
})
},
render : function(){
var styleObj = {
left: this.state.left
}
var img = this.props.item.map(function(img,key){
return(
<img src={img.src} alt = {img.alt} key={key} />
)
})
return (
<div className="imgBox" style={styleObj} ref="imgBox" onTouchStart={this.handleTouchStart} onTouchMove={this.handleTouchMove} onTouchEnd={this.handleTouchEnd}>
{img}
</div>
)
}
});
在调试的时候,第二次触发事件后,会弹出一个warning.
Warning:
div
was passed a style object that has previously been mutated. Mutatingstyle
is deprecated. Consider cloning it beforehand. Check therender
ofImgBox
. Previous style: {left: NaN}. Mutated style: {left: NaN}.
跪求指导解决。
都定义ref了, 那就直接 操作dom的style吧,
难道正常思路不应该是这样的?
initialState里面,left初始值是个字符串