我想將這個(gè)頁面的用戶名和權(quán)限設(shè)置的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="請(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好嘛。
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級(jí)產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動(dòng)互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺(tái)面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。