【问题标题】:Html/static files to React Componet /stateless functions?Html/静态文件到 React 组件/无状态函数?
【发布时间】:2023-04-06 22:20:02
【问题描述】:

我正在将一个投资组合从带有 bootstrap 和 vanilla js 的 Html 转移到 React。我在很大程度上是成功的,因为其中大部分是在 jsx 中编写 html 和引导程序,到目前为止似乎没有问题。但是我遇到了与图表显示有关的特定 html 和 js 代码集的问题。我正在尝试将这些代码集制作成一个组件,就像我和其他人一起做的那样。我收到此错误“未捕获的 TypeError:无法读取 null 的属性 'getContext'”。我尝试做 componentdid mount will mount ,然后我得到图表本身未定义错误。下面是可以正常工作的 html 和内联 js 代码以及我的无状态函数尝试。 图表数据本身来自https://github.com/nnnick/Chart.js/blob/master/LICENSE.md。如果有人想查看完整的代码,请看这里:https://www.dropbox.com/s/552xpfs3ubggrmd/portfolio.rar?dl=0 ps:Testing.html 有完整的代码,这些是我试图将其变成组件的代码

import React ,{Component} from 'react';
import chart from '../../../assets/js/Chart';
import '../../../assets/css/main.css';

export default class Skills extends Component {


render() {
  var doughnutData1 = [
        {
          value: 55,
          color:"#1abc9c"
        },
        {
          value : 30,
          color : "#ecf0f1"
        }
      ];
  var doughnutData2 = [
          {
            value: 80,
            color:"#1abc9c"
          },
          {
            value : 10,
            color : "#ecf0f1"
          }
        ];
  var doughnutData3 = [
            {
              value: 40,
              color:"#1abc9c"
            },
            {
              value : 35,
              color : "#ecf0f1"
            }
          ];
  var doughnutData4 = [
              {
                value: 95,
                color:"#1abc9c"
              },
              {
                value : 20,
                color : "#ecf0f1"
              }
            ];
  var doughnutData5 = [
                {
                  value: 65,
                  color:"#1abc9c"
                },
                {
                  value : 30,
                  color : "#ecf0f1"
                }
              ];
  var doughnutData6 = [
                  {
                    value: 50,
                    color:"#1abc9c"
                  },
                  {
                    value : 50,
                    color : "#ecf0f1"
                  }
                ];

      let myDoughnut1 = new chart.Chart(document.getElementById("javascript").getContext("2d")).Doughnut(doughnutData1);
      let myDoughnut2 = new chart.Chart(document.getElementById("bootstrap").getContext("2d")).Doughnut(doughnutData2);
      let myDoughnut3 = new chart.Chart(document.getElementById("wordpress").getContext("2d")).Doughnut(doughnutData3);
      let myDoughnut4 = new chart.Chart(document.getElementById("html").getContext("2d")).Doughnut(doughnutData4);
      let myDoughnut5 = new chart.Chart(document.getElementById("photoshop").getContext("2d")).Doughnut(doughnutData5);
      let myDoughnut6 = new chart.Chart(document.getElementById("illustrator").getContext("2d")).Doughnut(doughnutData6);

////////////////////////////////////////////
///////////////////////////////////////////
//////////////////////////////////////////
//////////////////////////////////////////



return (

//start
<div>


  <div id="skillswrap">
    <div className="container">
      <div className="row">
          <div className="col-lg-2 col-lg-offset-1">
            <h5>SKILLS</h5>
          </div>
          <div className="col-lg-3 centered">
            <canvas id="javascript" height="130" width="130"></canvas>
            <p>Javascript</p>
            <br></br>
             {myDoughnut1}
          </div>
          <div className="col-lg-3 centered">
            <canvas id="bootstrap" height="130" width="130"></canvas>
            <p>Bootstrap</p>
            <br></br>
               {myDoughnut2}
          </div>
          <div className="col-lg-3 centered">
            <canvas id="wordpress" height="130" width="130"></canvas>
            <p>jQuery</p>
            <br></br>
               {myDoughnut3}
          </div>

          <div className="col-lg-3 col-lg-offset-3 centered">
            <canvas id="html" height="130" width="130"></canvas>
            <p>HTML/CSS</p>
            <br></br>
               {myDoughnut4}
          </div>
          <div className="col-lg-3 centered">
            <canvas id="photoshop" height="130" width="130"></canvas>
            <p>Angular Js</p>
            <br></br>
               {myDoughnut5}
          </div>
          <div className="col-lg-3 centered">
            <canvas id="illustrator" height="130" width="130"></canvas>
            <p>React</p>
            <br></br>
               {myDoughnut6}
          </div>
  <p>Other Skills - UNIX Commands, NPM, Gulp, bower packages, Web packs </p>
  <p>Other Soft Skills - NOSQL,MYSQL, Node JS </p>
  <p>Other Softer Skills - C#, Java, Objective C, MYSQL, PHP, Python </p>


      </div>
  <br></br>
    </div>
  </div>

</div>
//end


);




};





}

<div id="skillswrap">
		<div class="container">
			<div class="row">
					<div class="col-lg-2 col-lg-offset-1">
						<h5>SKILLS</h5>
					</div>
					<div class="col-lg-3 centered">
						<canvas id="javascript" height="130" width="130"></canvas>
						<p>Javascript</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 55,
										color:"#1abc9c"
									},
									{
										value : 30,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("javascript").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>
					<div class="col-lg-3 centered">
						<canvas id="bootstrap" height="130" width="130"></canvas>
						<p>Bootstrap</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 80,
										color:"#1abc9c"
									},
									{
										value : 10,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("bootstrap").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>
					<div class="col-lg-3 centered">
						<canvas id="wordpress" height="130" width="130"></canvas>
						<p>jQuery</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 40,
										color:"#1abc9c"
									},
									{
										value : 35,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("wordpress").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>

					<div class="col-lg-3 col-lg-offset-3 centered">
						<canvas id="html" height="130" width="130"></canvas>
						<p>HTML/CSS</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 95,
										color:"#1abc9c"
									},
									{
										value : 20,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("html").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>
					<div class="col-lg-3 centered">
						<canvas id="photoshop" height="130" width="130"></canvas>
						<p>Angular Js</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 65,
										color:"#1abc9c"
									},
									{
										value : 30,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("photoshop").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>
					<div class="col-lg-3 centered">
						<canvas id="illustrator" height="130" width="130"></canvas>
						<p>React</p>
						<br>
						<script>
							var doughnutData = [
									{
										value: 50,
										color:"#1abc9c"
									},
									{
										value : 50,
										color : "#ecf0f1"
									}
								];
								var myDoughnut = new Chart(document.getElementById("illustrator").getContext("2d")).Doughnut(doughnutData);
						</script>
					</div>
<p>Other Skills - UNIX Commands, NPM, Gulp, bower packages, Web packs </p>
<p>Other Soft Skills - NOSQL,MYSQL, Node JS </p>
<p>Other Softer Skills - C#, Java, Objective C, MYSQL, PHP, Python </p>


			</div>
			<br>
		</div>
	</div>

【问题讨论】:

    标签: javascript reactjs ecmascript-6 components react-router


    【解决方案1】:

    看起来document.getElementById("...").getContext("2d")render() 中失败,因为元素尚未安装到 DOM。

    您应该等待componentDidMount 并在那里初始化您的图表模块。

    粗略的例子:

     export default class Skills extends Component {
    
          componentDidMount() {
               new chart.Chart(this.javascriptEl.getContext("2d")).Doughnut(data);
          }
    
          render() {
              return (
                   <canvas ref={(el) => {this.javascriptEl=el}}></canvas>
              );
          }
     }
    

    【讨论】:

      猜你喜欢
      • 2017-07-11
      • 2017-01-21
      • 1970-01-01
      • 2017-08-30
      • 2020-03-07
      • 2016-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多