ReactJS - 渲染正确组件的问题
ReactJS - issue with rendering the proper component
我正在从服务器中提取一个json响应。json 是一系列文章。根据 article.id 是偶数还是奇数,将其放置在正确的组件中。
如果文章的 id 是偶数,请将对象放在 LeftLargeImageArticle 组件中,否则将其放入 LargeRightImageArticle 组件中。
控制台日志记录显示文章已放入正确的组件中,但在呈现页面时,它会显示
杰森:
[
{
"image": "test1.jpg",
"h4": "h4 title",
"h3": "h3 title",
"p": "foo bar baz.",
"id": 1
},
{
"image": "test2.jpg",
"h4": "h4 title",
"h3": "h3 title",
"p": "foo bar baz.",
"id": 2
},
{
"image": "test3.jpg",
"h4": "h4 title",
"h3": "h3 title",
"p": "foo bar baz.",
"id": 3
},
{
"image": "test4.jpg",
"h4": "h4 title",
"h3": "h3 title",
"p": "foo bar baz.",
"id": 4
}
]
反应父组件:
var React = require('react');
var ScrollWrapper = require('./reusable-tool-components/ScrollWrapper.react');
var LargeLeftImageArticle = require('./reusable-tool-components/LargeLeftImageArticle.react');
var LargeRightImageArticle = require('./reusable-tool-components/LargeRightImageArticle.react');
var GuidingPrinciplesStore = require('./../stores/GuidingPrinciplesStore');
if (process.env.APP_ENV === 'browser') {
var GuidingPrinciplesArticlesWebUtilsAPI = require('./../../utils/GuidingPrinciplesArticlesWebUtilsAPI');
var test = GuidingPrinciplesArticlesWebUtilsAPI.initializeArticles();
console.log("test: ", test);
}
var GuidingPrinciples = React.createClass({
handleScroll: function(event) {
console.log("GuidingPrinciples Component handleScroll");
},
getInitialState: function() {
return {
articles: GuidingPrinciplesStore.getArticles()
};
},
render: function() {
// I got them, but need to divide them up to place in the specific component
var articleNodes = this.state.articles.map(function(article){
if (article.id % 2 === 0) {
console.log("put in left: ", article.id);
return (
<LargeLeftImageArticle h3={article.h3} h4={article.h4} p={article.p} image={article.image} key={article.id} />
);
} else {
console.log("put in right: ", article.id);
return (
<LargeRightImageArticle h3={article.h3} h4={article.h4} p={article.p} image={article.image} key={article.id} />
)
}
});
console.log("articleNodes: ", articleNodes); /* Shows each article object as typeof react.element. */
return (
<div>
<ScrollWrapper>
<div className="product">
<section className="container-fluid">
<img src="images/gator.jpg" className="img-responsive" />
</section>
<section className="container">
/*
* Currently on page rendering: article 1 (left large), 1 (right large), 3 (left large), 1 (right large).
* I need it to render: article 1 (right large), article 2 (left large), article 3 (right large), article 4 (left large).
* Why is this happening? Why don't the articles get rendered in the proper order? Are they being over-written?
*/
{articleNodes}
</section>
</div>
</ScrollWrapper>
</div>
)
}
});
module.exports = GuidingPrinciples;
子组件,应根据文章 ID 是否为偶数具有相应的属性:
var React = require('react');
var LargeLeftImageArticle = React.createClass({
render: function() {
return (
<article className="row large-left-img-article">
<div className="col-md-6">
<img src={"../images/" + this.props.image} alt={this.props.h3} className="img-responsive" />
</div>
<div className="col-md-6 content">
<header>
<h4>{this.props.h4}</h4>
<h3>{this.props.h3}</h3>
</header>
<p>{this.props.p}</p>
</div>
</article>
);
}
});
module.exports = LargeLeftImageArticle;
应包含具有奇数 ID 的文章的子组件:
var React = require('react');
var LargeRightImageArticle = React.createClass({
render: function() {
return (
<article className="row large-right-img-article">
<div className="col-md-6 content">
<header>
<h4>{this.props.h4}</h4>
<h3>{this.props.h3}</h3>
</header>
<p>{this.props.p}</p>
</div>
<div className="col-md-6">
<img src={"../images/" + this.props.image} alt={this.props.h3} className="img-responsive" />
</div>
</article>
);
}
});
module.exports = LargeRightImageArticle;
我已经为您创建了工作示例,希望对您有所帮助。所以:
简单的 CSS
.left{
width: 100px;
height: 100px;
float: left;
background: red;
}
.right{
width: 100px;
height: 100px;
float: right;
background: green;
}
JSX 文件
class Left extends React.Component {
constructor(props){
super(props)
}
render() {
const items = this.props.left.map((item)=>{
return <li>{item}</li>
})
return <ul className="left">{items}</ul>
}
}
class Right extends React.Component {
constructor(props){
super(props)
}
render() {
const items = this.props.right.map((item)=>{
return <li>{item}</li>
})
return <ul className="right">{items}</ul>
}
}
class Main extends React.Component {
constructor(){
this.state = {
count : 0,
rightElements: [],
leftElements: []
}
this.increment = this.increment.bind(this)
}
increment(){
const newCount = this.state.count + 1,
right = this.state.rightElements,
left = this.state.leftElements;
newCount % 2 === 0 ? right.push(newCount) : left.push(newCount)
this.setState({
count: newCount,
rightElements: right,
leftElements: left,
});
}
render() {
return <div>
<Right right={this.state.rightElements}/>
<Left left={this.state.leftElements}/>
<button onClick={this.increment}>Click Me</button>
</div>
}
}
React.render(<Main/>, document.getElementById('container'));
小提琴
谢谢
相关文章:
- 组件生命周期问题/无法处理未定义的问题
- 使用PrimeNG组件时出现问题(未找到指令注释)
- Ember组件'jQuery可排序的模板问题
- React.js简单组件组成问题
- 追加新web组件时出现线程问题
- Bootstrap 4旋转木马组件问题
- 反应组件加载问题
- 如何在回调函数的 Angular 1.5 组件中处理这个问题
- ExtJs 扩展组件问题
- 如何使 ember 组件从服务器获取数据.将 AJAX 调用放在组件中似乎不是处理此问题的好做法
- ReactJS - 渲染正确组件的问题
- 寻找 Web 组件来解决这个问题(可能是 SELECT 或不知道)
- JavaScript-呈现仪表组件时出现问题
- React.js显示了悬停问题组件的一部分
- 在viewModel之前注册淘汰组件的问题
- react router问题未捕获错误:不变冲突:元素类型无效:应为字符串(用于内置组件)
- ExtJS 4 -关于MVC架构的问题,使用MVC进行组件开发
- React Native Tabbar iOS绑定问题[期望一个组件类,得到object object]
- 事件没有触发,React组件之间的通信问题
- Angular 1.5的组件问题