Home > Software design >  React JS Not Rendering div element correctly
React JS Not Rendering div element correctly

Time:10-17

Since I am new to React, I am unable to understand why the below code is not showing the array bars correctly.

After inspecting, I realised that the code is not even generating the 'array-bar' div correctly.

Can somebody help in why this is not working ?

P.S.- This is an array visualiser which visualizes a random array.

import React, { Component } from "react";
import "./SortingViz.css";
export default class SortingViz extends Component {
  constructor(props) {
    super(props);
    this.state = {
      array: [],
    };
  }

  componentDidMount() {
    this.resetArray();
  }

  resetArray() {
    let array = [];
    for (let i = 0; i < 150; i  ) {
      array.push(randomInt(100,600));
    }
    this.setState(array);
    console.log(array);
  }
  
  render() {
    const { array } = this.state;
    return (
      <div className="array-container">
        {array.map((value, idx) => {
          <div className="array-bar"
            key={idx}
            style={{ height: `${value}px` }}></div>;
        })}
        <button onClick={() => this.resetArray}>Generate</button>
      </div>
    );
  }
}

function randomInt(min,  max)
{
    return Math.floor(Math.random() * (max - min   1))   min;
}

Here is the CSS for ref.

.array-container{
    margin: 0 auto;
}

.array-bar{
    background-color: blue;
    width: 5px;
}

CodePudding user response:

You need to return the div from the map callback

render() {
    const { array } = this.state;
    return (
      <div className="array-container">
        {array.map((value, idx) => {
          return <div className="array-bar"
            key={idx}
            style={{ height: `${value}px` }}></div>;
        })}
        <button onClick={() => this.resetArray}>Generate</button>
      </div>
    );
  }

CodePudding user response:

The reason is what @Mina says.

But given you only return an element and don't do anymore, you could Aldo do it by changing {} for () in your callback. That way indicates you return all surrender by (...)

render() {
    const { array } = this.state;
    return (
      <div className="array-container">
        {array.map((value, idx) => ( 
          <div className="array-bar"
            key={idx}
            style={{ height: `${value}px` }}></div>;
        ))}
        <button onClick={() => this.resetArray}>Generate</button>
      </div>
    );
  }
  • Related