在React中使用for循环和切换案例来动态呈现不同的组件

前端之家收集整理的这篇文章主要介绍了在React中使用for循环和切换案例来动态呈现不同的组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图在React JSX中使用switch case有条件地渲染组件。我正在尝试构建从特定json结构读取并呈现数据的内容。由于可以有许多不同的组件和数据,我试图动态呈现它。请参阅下面的代码,我没有收到任何错误,但组件没有得到渲染。在我的HTML中,我只能看到。这意味着循环不起作用。我尝试在vanilla JS中使用相同的循环,它的工作原理。
  1. var myPackage = [{
  2. sectionInfo:[{
  3. elementType: 1,text: "This is text from element type 1"
  4. }]
  5. },{
  6. sectionInfo:[{
  7. elementType: 2,text: "This is text from element type 2"
  8. }]
  9. }];
  10. var App = React.createClass({
  11.  
  12. render: function(){
  13. var elements = [];
  14. elements = myPackage.map(function(myObj){
  15. myObj.sectionInfo.map(function(myObj1){
  16. switch(myObj1.elementType){
  17. case 1: return(
  18. <Component1 text = {myObj1.text}/>
  19. );
  20. break;
  21. case 2: return(
  22. <Component2 text = {myObj1.text}/>
  23. )
  24. break;
  25. }
  26. })
  27. });
  28. return(
  29. <div className="App">
  30. {elements}
  31. </div>
  32. )
  33. }
  34. });
  35. var Component1 = React.createClass({
  36. render:function(){
  37. return(
  38. <div className = "element1">
  39. {this.props.text}
  40. </div>
  41. )
  42. }
  43. });
  44. var Component2 = React.createClass({
  45. render:function(){
  46. return(
  47. <div className = "element2">
  48. {this.props.text}
  49. </div>
  50. )
  51. }
  52. });
  53. ReactDOM.render(<App/>,document.getElementById('container'));

编辑:对代码添加了一些内容,现在我遇到了一个新问题。这是新代码

  1. var App = React.createClass({
  2.  
  3. render: function(){
  4. var elements = [];
  5. elements = myPackage.map(function(myObj){
  6. return(
  7. <div>
  8. myObj.sectionInfo.map(function(myObj1){
  9. switch(myObj1.elementType){
  10. case 1: return(
  11. <Component1 text = {myObj1.text}/>
  12. );
  13. break;
  14. case 2: return(
  15. <Component2 text = {myObj1.text}/>
  16. )
  17. break;
  18. }
  19. }
  20. </div>
  21. )
  22. });
  23. return(
  24. <div className="App">
  25. {elements}
  26. </div>
  27. )
  28. }
  29. });

我希望每次都在div中渲染。因此,如果一个部分有超过3个元素,则所有3个必须在div内。

您应该从第一个.map返回值,在您的情况下,它是来自内部.map的结果
  1. var elements = myPackage.map(function(myObj){
  2. return myObj.sectionInfo.map(function(myObj1) {
  3. // ...
  4. });
  5. });

更新:

根据您的新更新,您可以像这样更改代码

  1. var App = React.createClass({
  2.  
  3. section: function(myObj,parentIndex) {
  4. return myObj.sectionInfo.map(function(myObj1,index) {
  5. const key = parentIndex + '.' + index;
  6.  
  7. switch(myObj1.elementType) {
  8. case 1:
  9. return <Component1 text = {myObj1.text} key={ key } />
  10. case 2:
  11. return <Component2 text = {myObj1.text} key={ key } />
  12. }
  13. });
  14. },render: function() {
  15. var elements = myPackage.map(function(myObj) {
  16. return <div>
  17. { this.section(myObj,index) }
  18. </div>
  19. },this);
  20.  
  21. return <div className="App">
  22. { elements }
  23. </div>;
  24. }
  25. });

猜你在找的React相关文章