用到了antd的Radio單選框出了點(diǎn)問題,頁面初始化表格數(shù)據(jù)第一條是默認(rèn)不選上,第二條第三條分別默認(rèn)選上第二個(gè)跟第一個(gè),當(dāng)我點(diǎn)擊頁面上 “請(qǐng)求新數(shù)據(jù)” 按鈕時(shí),頁面重新setState了一次,表格第一條第三個(gè)默認(rèn)正常選上,第二條不選上,但給我選上了,這個(gè)問題就來了,打斷點(diǎn)發(fā)現(xiàn)checked這個(gè)值是false的,不知道為什么還選上
下面接口格式是根據(jù)后臺(tái)請(qǐng)求回來的格式模擬的,代碼不多,用到了antd的Table
import React, {Component, PropTypes} from 'react';
import { Tabs, DatePicker, Radio, Table, Select } from 'antd';
const RadioGroup = Radio.Group;
const getUserName = "張三";
class Radios extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentWillMount() {
this.initRequest();
}
initRequest = ()=> {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":[],"c":[]}',
},{
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":["張三"],"c":[]}',
},{
key: 3,
RQ: '20180115',
CODE: '55199106.RQ',
STATE: '{"a":["張三"],"b":[],"c":[]}',
}];
this.setState({ initData: data });
}
requestData =() => {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[],"c":["張三"]}',
},{
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"b":[],"a":[],"c":[]}',
},{
key: 3,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[""],"c":["張三"]}',
}];
this.setState({ initData: data });
}
render() {
const data = this.state.initData;
let { sortedInfo, filteredInfo } = this.state;
sortedInfo = sortedInfo || {};
filteredInfo = filteredInfo || {};
const columns = [
{
title: '日期',
dataIndex: 'RQ',
key: 'RQ',
width: 120,
filteredValue: filteredInfo.RQ || null,
onFilter: (value, record) => record.RQ.includes(value),
sorter: (a, b) => a.RQ.length - b.RQ.length,
sortOrder: sortedInfo.columnKey === 'RQ' && sortedInfo.order,
}, {
title: '代碼',
dataIndex: 'CODE',
key: 'CODE',
width: 168,
sorter: (a, b) => a.CODE - b.CODE,
sortOrder: sortedInfo.columnKey === 'CODE' && sortedInfo.order,
}, {
title: '投票',
width: 1165,
render: (text, data, index) => {
let userName = text.STATE ? JSON.parse(text.STATE) : '',userNames = '';
if (userName) {
if (userName.a) {
for (let i = 0; i < userName.a.length; i++) {
if (userName.a[i] === getUserName) {
userNames = '100%造假';
}
}
}
if (userName.b) {
for (let j = 0; j < userName.b.length; j++) {
if (userName.b[j] === getUserName) {
userNames = '大概率';
}
}
}
if (userName.c) {
for (let k = 0; k < userName.c.length; k++) {
if (userName.c[k] === getUserName) {
userNames = '小概率';
}
}
}
}
return (
<div>
<RadioGroup onChange={this.RadioGroup}>
<Radio checked={ userNames == "100%造假" ? true : false } value="0">100%造假</Radio>
<Radio checked={ userNames == "大概率" ? true : false } value="1">大概率</Radio>
<Radio checked={ userNames == "小概率" ? true : false } value="2">小概率</Radio>
</RadioGroup>
</div>
);
},
}];
return (
<div>
<button onClick={this.requestData}>請(qǐng)求新數(shù)據(jù)</button>
<Table scroll={{ x: true, y: 500 }} pagination={{ showQuickJumper: true, pageSize: 100 }} columns={columns} dataSource={data} onChange={this.handleChange} />
</div>
);
}
RadioGroup =(e) => {
console.log(e.target.value);
}
}
export default Radios;
你這文檔都沒看完,就寫代碼了,差評(píng)。
<RadioGroup onChange={this.onChange} value={this.state.value}>
<Radio value={1}>A</Radio>
<Radio value={2}>B</Radio>
<Radio value={3}>C</Radio>
<Radio value={4}>D</Radio>
</RadioGroup>
這個(gè)才是RadioGroup的用法,叢植RadioGroup的value值就可以了。
然后不得不說,代碼寫的比較丑,但是給的例子可以直接跑起來,這點(diǎn)不錯(cuò)。
丑指的這里
if (userName) {
if (userName.a) {
for (let i = 0; i < userName.a.length; i++) {
if (userName.a[i] === getUserName) {
userNames = '100%造假';
}
}
}
if (userName.b) {
for (let j = 0; j < userName.b.length; j++) {
if (userName.b[j] === getUserName) {
userNames = '大概率';
}
}
}
if (userName.c) {
for (let k = 0; k < userName.c.length; k++) {
if (userName.c[k] === getUserName) {
userNames = '小概率';
}
}
}
}
稍微修改了一下
import React, { Component, PropTypes } from 'react';
import { Tabs, DatePicker, Radio, Table, Select } from 'antd';
const RadioGroup = Radio.Group;
const getUserName = "張三";
const map = {
a: 0,
b: 1,
c: 2,
default: 9999
}
class Radios extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentWillMount() {
this.initRequest();
}
initRequest = () => {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":[],"c":[]}',
}, {
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":["張三"],"c":[]}',
}, {
key: 3,
RQ: '20180115',
CODE: '55199106.RQ',
STATE: '{"a":["張三"],"b":[],"c":[]}',
}];
this.setState({ initData: data });
}
requestData = () => {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[],"c":["張三"]}',
}, {
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"b":[],"a":[],"c":[]}',
}, {
key: 3,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[""],"c":["張三"]}',
}];
this.setState({ initData: data });
}
render() {
const data = this.state.initData;
let { sortedInfo, filteredInfo } = this.state;
sortedInfo = sortedInfo || {};
filteredInfo = filteredInfo || {};
const columns = [
{
title: '日期',
dataIndex: 'RQ',
key: 'RQ',
width: 120,
filteredValue: filteredInfo.RQ || null,
onFilter: (value, record) => record.RQ.includes(value),
sorter: (a, b) => a.RQ.length - b.RQ.length,
sortOrder: sortedInfo.columnKey === 'RQ' && sortedInfo.order,
}, {
title: '代碼',
dataIndex: 'CODE',
key: 'CODE',
width: 168,
sorter: (a, b) => a.CODE - b.CODE,
sortOrder: sortedInfo.columnKey === 'CODE' && sortedInfo.order,
}, {
title: '投票',
width: 1165,
render: (text, data, index) => {
// 解析數(shù)據(jù)
let userName = text.STATE ? JSON.parse(text.STATE) : '', userNames = '';
// 設(shè)置默認(rèn)顯示值
let value = map.default;
// 獲取選中value,可以提成方法
for (let variable in userName) {
if (userName[variable].some((item) => item === getUserName )) {
value = map[variable];
break;
}
}
return (
<div>
<RadioGroup value={value} onChange={this.RadioGroup}>
<Radio value={map.a}>100%造假</Radio>
<Radio value={map.b}>大概率</Radio>
<Radio value={map.c}>小概率</Radio>
</RadioGroup>
</div>
);
},
}];
return (
<div>
<button onClick={this.requestData}>請(qǐng)求新數(shù)據(jù)</button>
<Table scroll={{ x: true, y: 500 }} pagination={{ showQuickJumper: true, pageSize: 100 }} columns={columns} dataSource={data} onChange={this.handleChange} />
</div>
);
}
RadioGroup = (e) => {
console.log(e.target.value);
}
}
export default Radios;
===補(bǔ)充內(nèi)容==
那個(gè)本來應(yīng)該你自己來實(shí)現(xiàn)的,只是指出問題。
import React, { Component, PropTypes } from 'react';
import { Tabs, DatePicker, Radio, Table, Select } from 'antd';
const RadioGroup = Radio.Group;
const getUserName = "張三";
const map = {
a: 'a',
b: 'b',
c: 'c',
}
class Radios extends Component {
constructor(props) {
super(props);
this.state = {};
}
componentWillMount() {
this.initRequest();
}
getStateFromoData (data) {
const { STATE } = data;
return data.map((item) => {
const parseState = JSON.parse(item.STATE) || {};
item.STATE = "";
for(let key in parseState) {
if(parseState[key].some((item) => {return item === getUserName})) {
item.STATE = key;
}
}
return item;
})
}
initRequest = () => {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":[],"c":[]}',
}, {
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"a":[],"b":["張三"],"c":[]}',
}, {
key: 3,
RQ: '20180115',
CODE: '55199106.RQ',
STATE: '{"a":["張三"],"b":[],"c":[]}',
}];
this.setState({ initData: this.getStateFromoData(data) });
}
requestData = () => {
let data = [{
key: 1,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[],"c":["張三"]}',
}, {
key: 2,
RQ: '20180505',
CODE: '55199106.RQ',
STATE: '{"b":[],"a":[],"c":[]}',
}, {
key: 3,
RQ: '20180805',
CODE: '55199106.RQ',
STATE: '{"a":[""],"b":[""],"c":["張三"]}',
}];
this.setState({ initData: this.getStateFromoData(data) });
}
render() {
const data = this.state.initData;
let { sortedInfo, filteredInfo } = this.state;
sortedInfo = sortedInfo || {};
filteredInfo = filteredInfo || {};
const columns = [
{
title: '日期',
dataIndex: 'RQ',
key: 'RQ',
width: 120,
filteredValue: filteredInfo.RQ || null,
onFilter: (value, record) => record.RQ.includes(value),
sorter: (a, b) => a.RQ.length - b.RQ.length,
sortOrder: sortedInfo.columnKey === 'RQ' && sortedInfo.order,
}, {
title: '代碼',
dataIndex: 'CODE',
key: 'CODE',
width: 168,
sorter: (a, b) => a.CODE - b.CODE,
sortOrder: sortedInfo.columnKey === 'CODE' && sortedInfo.order,
}, {
title: '投票',
width: 1165,
key: 'VOTE',
render: (text, data, index) => {
return (
<div>
<RadioGroup value={text.STATE} onChange={this.RadioGroup(index)}>
<Radio value={map.a}>100%造假</Radio>
<Radio value={map.b}>大概率</Radio>
<Radio value={map.c}>小概率</Radio>
</RadioGroup>
</div>
);
},
}];
return (
<div>
<button onClick={this.requestData}>請(qǐng)求新數(shù)據(jù)</button>
<Table scroll={{ x: true, y: 500 }} pagination={{ showQuickJumper: true, pageSize: 100 }} columns={columns} dataSource={data} onChange={this.handleChange} />
</div>
);
}
RadioGroup = (index) => {
return (e) => {
// 拷貝數(shù)據(jù)
const copyData = this.state.initData.slice(0)
// 修改數(shù)據(jù)
copyData[index].STATE = e.target.value;
// 更新狀態(tài)
this.setState({
initData: copyData
})
}
}
}
export default Radios;
看完好好思考下你之前的代碼結(jié)構(gòu),其實(shí)很有問題
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國(guó)IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國(guó)家
北大青鳥中博軟件學(xué)院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學(xué)院和江蘇省首批服務(wù)外包人才培訓(xùn)基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團(tuán)創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術(shù)與教育服務(wù)機(jī)構(gòu),發(fā)展為教育服務(wù)業(yè)的綜合性企業(yè)集團(tuán),成為集合面授教學(xué)培訓(xùn)、網(wǎng)
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國(guó)一站式人才培養(yǎng)平臺(tái)、一站式人才輸送平臺(tái)。2014年4月3日在美國(guó)成功上市,融資1
曾工作于聯(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庫(kù),具有快速界面開發(fā)的能力,對(duì)瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國(guó)Software AG 技術(shù)顧問,美國(guó)Dachieve 系統(tǒng)架構(gòu)師,美國(guó)AngelEngineers Inc. 系統(tǒng)架構(gòu)師。