Search code examples
javascripthtmltypescriptesri

Typescript Render showing button as text instead of HTML


I have a typescript file where i am rendering a simple hello world div. I can render an HTML table, however adding an Input or a Button renders literally as "<button>my button</button>".

button displaying as text

From my expierience, it seems like I am missing a package to import. I have pasted my imports and the Render() function below:

import * as watchUtils from "esri/core/watchUtils";
import Handles = require("esri/core/Handles");
import { declared, property, subclass } from "esri/core/accessorSupport/decorators";
import MapView = require("esri/views/MapView");
import Widget = require("esri/widgets/Widget");
import { renderable, tsx } from "esri/widgets/support/widget";



render() {

    if(resolvedValue != null){
        selectedHasfolder = "<table >"; 
        for(var i = 0; i < resolvedValue.length; ++i){
            selectedHasfolder += "<tr><td><button >Select Inspection(s) to proceed.</button></td><td>" + resolvedValue[i]["PropertyA"] + "</td></tr>";
        }       
                        selectedHasfolder += "</table>";    


    }   


return <div class="basemap23"  style="background-color:#FFFFFF;" innerHTML={selectedHasfolder}></div>;

Solution

  • I recommend you do something like this and not use innerHTML.

    function Component() {
      const selectedHasFolder = resolvedValue ? (
        <table>
          {resolvedValue.map((item, index) => (
            <tr key={index}>
              <td>item.propertyA</td>
              <td>
                <button>Select Inspection(s) to proceed.</button>
              </td>
            </tr>
          ))}
        </table>
      ) : null;
    
      return (
        <div class="basemap23" style="background-color:#FFFFFF;">
          {selectedHasFolder}
        </div>
      );
    }