ReactJS中的自定义图像切换按钮

大麋鹿

我有这个ReactJS代码来显示一个自定义图像按钮,该按钮可以在2个不同的图像之间切换,以显示开和关状态。有没有更简单的方法可以做到这一点?我希望CSS可以减少代码行的数量,但无法找到一个简单的示例。

下面的代码将状态从传递<MyIconButton>到,<MyPartyCatButton>传递<MyHomeView>我的应用程序在主屏幕上将有4个这些自定义按钮,这就是我排除在外的原因<MyIconButton>

顺便说一句-这是针对移动应用程序的,我阅读(并自己注意到),使用移动浏览器上的复选框确实很慢;这就是为什么我选择不使用复选框尝试此操作的原因。

ReactJS代码

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({
    render: function(){
        var pic= this.props.pressed? this.props.onpic : this.props.offpic
        return <img 
            src={pic} 
            onClick={this.props.tuggleSelection}  //updateFilter is wierd name
        />
    }
})

(编辑:这样,在MyPartyCatButton组件上,您可以传递函数来处理'tuggleSelection'事件。event function参数是一个事件对象,但是按钮状态已经处于包装状态(旧状态),因此应将其反转)。您的代码将如下所示:

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 )
}

但如果不这样做,请使用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}
        />
    }
})

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Access中制作自定义切换按钮

来自分类Dev

Flutter-自定义切换按钮选择

来自分类Dev

FooTable自定义切换按钮

来自分类Dev

React Native 自定义切换按钮组件

来自分类Dev

带动画的自定义圆形切换按钮

来自分类Dev

在Outlook加载项中获取自定义的切换按钮

来自分类Dev

在自定义 UITableViewCell 中设置切换目标

来自分类Dev

自定义CheckBox不会在选中/取消选中时切换按钮图像(Android)

来自分类Dev

如何使用三个选项自定义切换按钮

来自分类Dev

在Lotus Notes表单上的“操作”按钮上切换自定义图标

来自分类Dev

SWRevealViewController切换开关不适用于自定义导航栏按钮

来自分类Dev

在Lotus Notes表单上的“操作”按钮上切换自定义图标

来自分类Dev

如何自定义带有三个选项的android的切换按钮

来自分类Dev

引导程序自定义单选按钮切换隐藏的输入

来自分类Dev

在自定义列表视图中切换 ImageView 按钮

来自分类Dev

带有 ContentControl 的 WPF 自定义切换按钮

来自分类Dev

iOS多任务应用切换器自定义图像

来自分类Dev

动作栏抽屉切换自定义图标

来自分类Dev

在AngularJS中切换自定义排序图标

来自分类Dev

Polylang自定义语言切换器

来自分类Dev

动作栏抽屉切换自定义图标

来自分类Dev

自定义分段控件不切换视图

来自分类Dev

jQuery 切换自定义动画

来自分类Dev

切换自定义元素“聚合物”中的“纸张对话框”

来自分类Dev

AJAX成功代码中的自定义切换功能

来自分类Dev

根据切换开关在WooCommerce Checkout中添加自定义折扣

来自分类Dev

AJAX成功代码中的自定义切换功能

来自分类Dev

iOS-以编程方式切换视图控制器中的自定义动画

来自分类Dev

快速切换UITableView中的自定义单元格

Related 相关文章

  1. 1

    在Access中制作自定义切换按钮

  2. 2

    Flutter-自定义切换按钮选择

  3. 3

    FooTable自定义切换按钮

  4. 4

    React Native 自定义切换按钮组件

  5. 5

    带动画的自定义圆形切换按钮

  6. 6

    在Outlook加载项中获取自定义的切换按钮

  7. 7

    在自定义 UITableViewCell 中设置切换目标

  8. 8

    自定义CheckBox不会在选中/取消选中时切换按钮图像(Android)

  9. 9

    如何使用三个选项自定义切换按钮

  10. 10

    在Lotus Notes表单上的“操作”按钮上切换自定义图标

  11. 11

    SWRevealViewController切换开关不适用于自定义导航栏按钮

  12. 12

    在Lotus Notes表单上的“操作”按钮上切换自定义图标

  13. 13

    如何自定义带有三个选项的android的切换按钮

  14. 14

    引导程序自定义单选按钮切换隐藏的输入

  15. 15

    在自定义列表视图中切换 ImageView 按钮

  16. 16

    带有 ContentControl 的 WPF 自定义切换按钮

  17. 17

    iOS多任务应用切换器自定义图像

  18. 18

    动作栏抽屉切换自定义图标

  19. 19

    在AngularJS中切换自定义排序图标

  20. 20

    Polylang自定义语言切换器

  21. 21

    动作栏抽屉切换自定义图标

  22. 22

    自定义分段控件不切换视图

  23. 23

    jQuery 切换自定义动画

  24. 24

    切换自定义元素“聚合物”中的“纸张对话框”

  25. 25

    AJAX成功代码中的自定义切换功能

  26. 26

    根据切换开关在WooCommerce Checkout中添加自定义折扣

  27. 27

    AJAX成功代码中的自定义切换功能

  28. 28

    iOS-以编程方式切换视图控制器中的自定义动画

  29. 29

    快速切换UITableView中的自定义单元格

热门标签

归档