我想將這個頁面的用戶名和權限設置的checkbox信息傳到redux中。
并在另外頁面以列表的形式顯示出來。
求大神指教~
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="請輸入用戶名" onChange={e => this.onInputChangeName(e)}/></div>
<div>權限設置</div>
<div class="adduser_checkbox">
<div class="adduser_setitle">權限頁面</div>
<div class="adduser_setitle">權限</div>
<div>開發(fā)者權限</div>
<div><input class="adduser_check" name="1" type="checkbox" onChange={e => this.onInputChange1(e)}/></div>
<div>體驗者權限</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)}}>確認添加</button>
</div>
</div>
</div>
</div>
)
}
}
你現(xiàn)在的寫法基本上沒有用到redux,下面是我改造了一下。
在redux中獲取checkbox的狀態(tài):就是在點擊checkbox的時候,dispatch一個action,傳遞需要的參數(shù)(索引,是否選中),然后在對應的reducer函數(shù)中修改狀態(tài)。修改狀態(tài)成功后頁面上就能拿到最新的狀態(tài),你提交、傳遞數(shù)據(jù)都可以用這個最新的狀態(tài)。
reducer部分
// state格式建議寫成這樣。權限使用一個數(shù)組,然后循環(huán)出來。
const initialState = {
userinfo: {
userName: '',
permission: [{
name: '開發(fā)者權限',
checked: true,
}, {
name: '體驗者權限',
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;
}
}
頁面關鍵代碼
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)顯示權限,點擊時調用handleChange,把當前選擇狀態(tài)和索引當做參數(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) {
// 這里偷了點懶,最好應該是調用一個action創(chuàng)建函數(shù)。然后它就去reducer修改狀態(tài)了。
return {
handleChange: (checked, index) => dispatch({ type: 'CHANGE_PERMISSION', checked, index }),
};
}
export default connect(mapStateToProps, mapDispatchToProps)(AddUser);
修改姓名也是同樣的邏輯。
還有,樣式一會用class一會用className是什么鬼,只能用className好嘛。
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內(nèi)教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。