在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 如何獲取checkbox的狀態(tài)并傳入redux中

如何獲取checkbox的狀態(tài)并傳入redux中

我的問題

我想將這個(gè)頁面的用戶名和權(quán)限設(shè)置的checkbox信息傳到redux中。
并在另外頁面以列表的形式顯示出來。

幾個(gè)點(diǎn)不懂

  1. 如何在redux中獲取checkbox的狀態(tài)
  2. 我需要同時(shí)將用戶名的字符串和多個(gè)checkbox的選中信息一起傳出去,我需要怎么設(shè)計(jì)這個(gè)state的格式?

求大神指教~

圖片描述

class AddUser extends React.Component{
    constructor(props){
        super(props);
        this.state = {
            userinfo : {
                // username :'',
                // usercheck1 : false,
                // usercheck2 : false,
                // usercheck3 : false,
                // usercheck4 : false,
                // usercheck5 : false,
            }
        }
    }
    onInputChangeName(e){
        let inputValue  = e.target.value;
        this.setState({
            userinfo : Object.assign(this.state.userinfo,{username : inputValue })
        });
    }
    onSubmitAdd(){
        store.dispatch(AddUser(this.state.userinfo));
        this.props.history.push('/layout/id');
    }
    render(){
        return(
            <div class="add_page">
                <TopNav />
                <div className="addmain">
                    <div className="addcenter">
                        <p class="adduser_title">添加用戶</p>
                        <div className="addtablebg">
                            <div className="addtable">
                                <div>用戶名</div>
                                <div><input type="text" class="adduser_inputname" placeholder="請(qǐng)輸入用戶名" onChange={e => this.onInputChangeName(e)}/></div>
                                <div>權(quán)限設(shè)置</div>
                                <div class="adduser_checkbox"> 
                                
                                    <div class="adduser_setitle">權(quán)限頁面</div>
                                    <div class="adduser_setitle">權(quán)限</div>

                                    <div>開發(fā)者權(quán)限</div>
                                    <div><input class="adduser_check" name="1" type="checkbox" onChange={e => this.onInputChange1(e)}/></div>
                                
                                    <div>體驗(yàn)者權(quán)限</div>
                                    <div><input class="adduser_check" name="2" type="checkbox" onChange={e => this.onInputChange2(e)}/></div>
                            
                                    <div>登錄</div>
                                    <div><input class="adduser_check" name="3" type="checkbox" onChange={e => this.onInputChange3(e)}/></div>
                            
                                    <div>數(shù)據(jù)分析</div>
                                    <div><input class="adduser_check" name="4" type="checkbox" onChange={e => this.onInputChange4(e)}/></div>
                            
                                    <div>開發(fā)管理</div>
                                    <div><input class="adduser_check" name="5" type="checkbox" onChange={e => this.onInputChange5(e)}/></div>
                                
                                </div>
                            </div>
                            <button class="adduser_confirm" onClick={e => {this.onSubmitAdd(e)}}>確認(rèn)添加</button>
                        </div>
                    </div>
                </div>
            </div>
            )
    }
}
回答
編輯回答
背叛者

你現(xiàn)在的寫法基本上沒有用到redux,下面是我改造了一下。
在redux中獲取checkbox的狀態(tài):就是在點(diǎn)擊checkbox的時(shí)候,dispatch一個(gè)action,傳遞需要的參數(shù)(索引,是否選中),然后在對(duì)應(yīng)的reducer函數(shù)中修改狀態(tài)。修改狀態(tài)成功后頁面上就能拿到最新的狀態(tài),你提交、傳遞數(shù)據(jù)都可以用這個(gè)最新的狀態(tài)。
reducer部分

// state格式建議寫成這樣。權(quán)限使用一個(gè)數(shù)組,然后循環(huán)出來。
const initialState = {
  userinfo: {
    userName: '',
    permission: [{
      name: '開發(fā)者權(quán)限',
      checked: true,
    }, {
      name: '體驗(yàn)者權(quán)限',
      checked: false,
    }, {
      name: '登錄',
      checked: false,
    }, {
      name: '數(shù)據(jù)分析',
      checked: false,
    }, {
      name: '開發(fā)管理',
      checked: false,
    }],
  }
};
// 修改選中狀態(tài)
export default function userPermission(state = initialState, action) {
  switch (action.type) {
    case 'CHANGE_PERMISSION':
      const newData = state.userinfo.permission.map((item, index) =>
        action.index === index ? {
          ...item,
          checked: action.checked
        } : item
      );
      return {
        userinfo: {
          ...state.userinfo,
          permission: newData
        }
      };
    default:
      return state;
  }
}

頁面關(guān)鍵代碼

import React from 'react';
import { connect } from 'react-redux';

class AddUser extends React.Component {
  code...
   render() {
    const {
      userinfo,
      handleChange,
    } = this.props;

    return (
      <div className="add_page">
        code...
        {
          // 循環(huán)顯示權(quán)限,點(diǎn)擊時(shí)調(diào)用handleChange,把當(dāng)前選擇狀態(tài)和索引當(dāng)做參數(shù)傳遞出去
          userinfo.permission.map((item, index) => (
            <div key={index}>
              <span>{item.name}</span>
              <input type="checkbox" className="adduser_check" name={index} checked={item.checked} onChange={(e) => handleChange(e.target.checked, index)} />
            </div>
          ))
        }
        code...
      </div>
    )
  }
}

function mapStateToProps(state) {
  return {
    userinfo: state.userinfo,
  };
}

function mapDispatchToProps(dispatch) {
  // 這里偷了點(diǎn)懶,最好應(yīng)該是調(diào)用一個(gè)action創(chuàng)建函數(shù)。然后它就去reducer修改狀態(tài)了。
  return {
    handleChange: (checked, index) => dispatch({ type: 'CHANGE_PERMISSION', checked, index }),
  };
}

export default connect(mapStateToProps, mapDispatchToProps)(AddUser);

修改姓名也是同樣的邏輯。
還有,樣式一會(huì)用class一會(huì)用className是什么鬼,只能用className好嘛。

2018年7月15日 16:54