尝试将JSON文件转换为数组,然后从中随机选择5个项目。ReactJS:Uncaught ReferenceError:[功能]未定义,2017年7月
我认为问题是我的渲染/返回语句在ImageContainer.js的底部,但我是一个ReactJS n00b,所以它可能是任何东西。
任何帮助或建议,非常感谢。
控制台错误
compiled.js:31562 Uncaught ReferenceError: selectImages is not defined
at ImageContainer.render (compiled.js:31562)
at compiled.js:20195
at measureLifeCyclePerf (compiled.js:19475)
at ReactCompositeComponentWrapper._renderValidatedComponentWithoutOwnerOrContext (compiled.js:20194)
at ReactCompositeComponentWrapper._renderValidatedComponent (compiled.js:20221)
at ReactCompositeComponentWrapper.performInitialMount (compiled.js:19761)
at ReactCompositeComponentWrapper.mountComponent (compiled.js:19657)
at Object.mountComponent (compiled.js:4009)
at ReactDOMComponent.mountChildren (compiled.js:24150)
at ReactDOMComponent._createInitialChildren (compiled.js:21126)
ImageContainer.js - 拉从以.json文件IMG信息,随机选择5渲染
import React from 'react';
import ReactDOM from 'react-dom';
import { Image } from './Image';
export class ImageContainer extends React.Component {
constructor(props) {
super(props);
this.numImages = 5;
this.state = {
data: []
};
}
componentDidMount() {
$.ajax({
url: '../app/data/namegame-data.json',
dataType: 'json',
success: function(data) {
this.setState({data: data});
}.bind(this),
error: function(xhr, status, err) {
console.error('#GET Error', status, err.toString());
}.bind(this)
});
}
shuffleArray(array) {
let i = array.length - 1;
for (; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
const temp = array[i];
array[i] = array[j];
array[j] = temp;
}
return array;
}
selectImages({ data }) {
const shuffledImages = shuffleArray(images);
return (
shuffledImages.map((data, idx) => {
for (let i = 0; i < this.numImages; i++) {
if (this.state.data.length > 0) {
return <Image key={idx} name={data.name} src={data.src} />;
}
}
})
);
}
render() {
return {selectImages};
}
}
Image.js - 只是图片HTML
import React from 'react';
export class Image extends React.Component {
render() {
const key = this.props.id;
const name = this.props.name;
const src = this.props.src;
return (
<picture>
<img id="pic-template" className="pic" src="{src}" name="{name}" key="id" />
</picture>
);
}
}
[主] .js文件 - 大部分HTML的就在这里,只包括进口位
import React from 'react';
import ReactDOM from 'react-dom';
import { ImageContainer } from './ImageContainer';
export default class NameGame extends React.Component {
render() {
return (
...
<div id="images-wrap">
<ImageContainer />
</div>
...
);
}
}
依赖
{
...
"dependencies": {
"json-loader": "^0.5.4",
"react": "^15.6.1",
"react-dom": "^15.6.1"
},
"devDependencies": {
"css-loader": "^0.28.4",
"extract-text-webpack-plugin": "^2.1.2",
"node-sass": "^4.5.3",
"sass-loader": "^6.0.6",
"style-loader": "^0.18.2",
"webpack": "^2.2.0",
"webpack-dev-server": "^2.5.0"
}
}
感谢您的快速回复!绝对要靠近几步。现在的错误是:* Uncaught TypeError:无法读取未定义的属性“长度”*除了进行更改并添加更多“this”之外。前缀,我改变componentDidMount()componentWillMount(),加载,但ajax调用不成功。 – n0bodySp3cial
进一步阅读表明componentDidMount()是正确的,但是JSON可能*不会被解析成任何可用的东西 - 继续破解这个。 – n0bodySp3cial
查看更新后的anwser –