Javascript ReactJS中的自定义图像切换按钮
我有这段代码来显示一个自定义图像按钮,它可以在两个不同的图像之间切换打开和关闭状态。有没有更简单的方法?我希望CSS的代码行数少一些,但找不到一个简单的例子 下面的代码将状态从Javascript ReactJS中的自定义图像切换按钮,javascript,css,reactjs,Javascript,Css,Reactjs,我有这段代码来显示一个自定义图像按钮,它可以在两个不同的图像之间切换打开和关闭状态。有没有更简单的方法?我希望CSS的代码行数少一些,但找不到一个简单的例子 下面的代码将状态从向上传递到,然后再传递到。我的应用程序将在主屏幕上有4个自定义按钮,这就是我将排除在外的原因 顺便说一句,这是一个移动应用程序,我读到(我自己也注意到)在移动浏览器上使用复选框的速度非常慢;这就是为什么我选择不使用复选框来尝试这个 反应JS代码 var MyIconButton = React.createClass({
向上传递到
,然后再传递到
。我的应用程序将在主屏幕上有4个自定义按钮,这就是我将
排除在外的原因
顺便说一句,这是一个移动应用程序,我读到(我自己也注意到)在移动浏览器上使用复选框的速度非常慢;这就是为什么我选择不使用复选框来尝试这个
反应JS代码
var MyIconButton = React.createClass({
handleSubmit: function(e) {
e.preventDefault();
console.log("INSIDE: MyIconButton handleSubmit");
// Change button's state ON/OFF,
// then sends state up the food chain via
// this.props.updateFilter( b_buttonOn ).
var b_buttonOn = false;
if (this.props.pressed === true) {
b_buttonOn = false;
}
else {
b_buttonOn = true;
}
// updateFilter is a 'pointer' to a method in the calling React component.
this.props.updateFilter( b_buttonOn );
},
render: function() {
// Show On or Off image.
// ** I could use ? : inside the JSX/HTML but prefer long form to make it explicitly obvious.
var buttonImg = "";
if (this.props.pressed === true) {
buttonImg = this.props.onpic;
}
else {
buttonImg = this.props.offpic;
}
return (
<div>
<form onSubmit={this.handleSubmit}>
<input type="image" src={buttonImg}></input>
</form>
</div>
);
}
});
// <MyPartyCatButton> Doesn't have it's own state,
// passes state of <MyIconButton>
// straight through to <MyHomeView>.
var MyPartyCatButton = React.createClass({
render: function() {
return (
<MyIconButton pressed={this.props.pressed} updateFilter={this.props.updateFilter} onpic="static/images/icon1.jpeg" offpic="static/images/off-icon.jpg"/>
);
}
});
//
// Main App view
var MyHomeView = React.createClass({
getInitialState: function() {
// This is where I'll eventually get data from the server.
return {
b_MyPartyCat: true
};
},
updatePartyCategory: function(value) {
// Eventually will write value to the server.
this.setState( {b_MyPartyCat: value} );
console.log("INSIDE: MyHomeView() updatePartyCategory() " + this.state.b_MyPartyCat );
},
render: function() {
return (
<div>
<MyPartyCatButton pressed={this.state.b_MyPartyCat} updateFilter={this.updatePartyCategory}/>
</div>
// Eventually will have 3 other categories i.e. Books, Skateboards, Trees !
);
}
});
var MyIconButton=React.createClass({
handleSubmit:函数(e){
e、 预防默认值();
log(“内部:MyIconButton handleSubmit”);
//更改按钮的开/关状态,
//然后通过网络将状态发送到食物链上
//this.props.updateFilter(b_buttonOn)。
var b_buttonOn=false;
如果(this.props.pressed===true){
b_=false;
}
否则{
b_=true;
}
//updateFilter是指向调用React组件中的方法的“指针”。
this.props.updateFilter(b_buttonOn);
},
render:function(){
//显示或关闭图像。
//**我可以使用?:在JSX/HTML中,但更喜欢长格式,以使其明确可见。
var buttonImg=“”;
如果(this.props.pressed===true){
buttonImg=this.props.onpic;
}
否则{
buttonImg=this.props.offpic;
}
返回(
);
}
});
//没有自己的状态,
//通过州
//直接到。
var MyPartyCatButton=React.createClass({
render:function(){
返回(
);
}
});
//
//主应用程序视图
var MyHomeView=React.createClass({
getInitialState:函数(){
//这是我最终从服务器获取数据的地方。
返回{
b_MyPartyCat:对
};
},
updatePartyCategory:函数(值){
//最终将向服务器写入值。
this.setState({b_MyPartyCat:value});
log(“内部:MyHomeView()updatePartyCategory()”+this.state.b_MyPartyCat);
},
render:function(){
返回(
//最终将有3个其他类别,即书籍、滑板、树木!
);
}
});
如果动态更新组件“pressed”prop(就像您所做的那样),只需
var MyIconButton=React.createClass({
render:function(){
var pic=this.props.pressed?this.props.onpic:this.props.offpic
返回
}
})
(编辑:通过这种方式,在MyPartyCatButton组件上,您可以传递函数来处理“tuggleSelection”事件。事件函数参数是一个,但您的按钮状态为包装状态(旧的,因此您应该将其反转)。您的代码如下所示:
render: function(){
return <MyIconButton pressed={this.state.PartyCatPressed} tuggleSelection={this.updatePartyCategory} />
}
updatePartyCategory: function(e){
this.setState(
{PartyCatPressed: !this.state.PartyCatPressed} //this invert PartyCatPressed value
);
console.log("INSIDE: MyHomeView() updatePartyCategory() " + this.state.b_MyPartyCat )
}
render:function(){
返回
}
updatePartyCategory:函数(e){
此.setState(
{PartyCatPressed:!this.state.PartyCatPressed}//此反转PartyCatPressed值
);
log(“内部:MyHomeView()updatePartyCategory()”+this.state.b_MyPartyCat)
}
)
但如果没有,请使用prop作为默认值:
var MyIconButton= React.createClass({
getInitialState: function(){
return {pressed: this.props.defultPressed}
},
handleClick: function(){
this.setState({pressed: !this.state.pressed})
},
render: function(){
var pic= this.state.pressed? this.props.onpic : this.props.offpic
return <img
src={pic}
onClick={this.handleClick}
/>
}
})
var MyIconButton=React.createClass({
getInitialState:函数(){
return{pressed:this.props.defultPressed}
},
handleClick:function(){
this.setState({pressed:!this.state.pressed})
},
render:function(){
var pic=this.state.pressed?this.props.onpic:this.props.offpic
返回
}
})
StackOverflow不是提出“有什么想法”之类问题的好地方。react google组,或者irc.freenode.net上的#react JS是解决这类问题的好地方。我改写了,现在看起来怎么样?很好,好多了。我认为它只需要再进行一次重新开放投票。我不知道这种方式如何将按钮的切换状态传递回家长?我更新了问题,以便在描述中正确显示组件名称。很好,不需要标签-)
var MyIconButton= React.createClass({
getInitialState: function(){
return {pressed: this.props.defultPressed}
},
handleClick: function(){
this.setState({pressed: !this.state.pressed})
},
render: function(){
var pic= this.state.pressed? this.props.onpic : this.props.offpic
return <img
src={pic}
onClick={this.handleClick}
/>
}
})