我有一个图片网址数组,我正在尝试创建一个新的对象,该对象应如下所示:
source: { uri: 'http://i.imgur.com/XP2BE7q.jpg' }
所以我用reduce()做到了。现在,我想要修改后的imageArray并为其分配状态变量,称为images(必须是数组),但是我却收到未定义引用错误imageArray的原因?
我想将新创建的imageArray分配给状态变量,该怎么办?目前,我收到参考错误,应该将reduce()
操作移到类组件之外。
代码:
export default class ImageView extends Component {
constructor(props) {
super(props);
this.state = {
index: 0,
images: imageArray
};
}
render() {
const imageArray = this.props.images.reduce((acc, images) => {
let temp = {
source: {
uri: images
}
};
acc.push(temp);
return acc;
}, []);
console.log(imageArray);
return <View style={{ flex: 1 }} />;
}
}
答案 0 :(得分:1)
您正在您的render方法中定义imageArray
,这超出了constructor
的范围。建议您在定义图像数组之后调用this.setState({ images: imageArray });
,这应该不会在render
方法内部发生。将state.images初始化为一个空数组。在componentDidMount
中,减少this.props.images
,然后呼叫setState
。
答案 1 :(得分:1)
尝试一下:
export default class ImageView extends Component {
constructor(props) {
super(props);
this.state = {
index: 0,
images: []
};
}
componentDidMount() {
const imageArray = this.props.images.reduce((acc, images) => {
let temp = {
source: {
uri: images
}
};
acc.push(temp);
return acc;
}, []);
this.setState({ images: imageArray });
}
render() {
return <View style={{ flex: 1 }} />;
}
}