有一个阵列看起来如下:Javascript - array.map匹配索引
[[3,0],[6,0],[2,0],[9,0] ....]
我试图创建一个React/Redux reducer,将其中一个0的值更改为1.我点击一个元素并分派一个操作。 IDX是一个元件的阵列中的索引(例如,0,1,2,3)
export const toggleTile = (idx) => {
return {
type: TOGGLE_TILE,
idx
};
};
减速器下面不工作,因为我想的那样。我刚刚创建了条件语句的框架。如果我点击索引为3的图块(所以第四个图块),它会将所有元素的[n,0]更改为[n,1]。首先,它应该只会点击任何一个图块,并且它应该将[n,0]更改为[n,1]仅用于点击的图块,因此我试图将下面的代码中的3更改为被映射的'i'元素的索引。
export default (state = [], action = {}) => {
switch (action.type) {
case LOAD_GRID:
return action.payload || [];
case TOGGLE_TILE:
return state.map((i) => {
if (action.idx === 3) {
return (i[1] === 0
? [i[0], parseInt(i[1], 10) + 1]
: [i[0], parseInt(i[1], 10) - 1]
);
}
return [i[0], i[1]];
});
default:
return state;
}
};
网格组件:
export default class Grid extends Component {
render() {
const mygrid = [];
this.props.inGrid.forEach((r, i) => {
mygrid.push(
<Square
key={i}
idx={i}
sqValue={r}
toggleTile={this.props.toggleTile}
/>
);
});
const { grid } = styles;
return (
<View style={grid}>
{mygrid}
</View>
);
}
}
export default class Square extends Component {
myaction() {
this.props.toggleTile(this.props.idx);
console.log(this.props.idx);
}
render() {
const { square, textStyle, squareActive } = styles;
const { sqValue } = this.props;
return (
<TouchableHighlight
style={[square, sqValue[1] && squareActive]}
onPress={this.myaction.bind(this)}
>
<View>
<Text style={textStyle}>{sqValue[0]},{sqValue[1]}</Text>
</View>
</TouchableHighlight>
);
}
}
请指教。
这是“[[3,0],[6,0],[2,0],[9,0] ... ](“我)=”{ – SoEzPz
是的,这是返回的状态。 – Wasteland