Как загрузить изображение в React JS?

Я пытаюсь создать средство просмотра изображений, которое имеет функциональность ** rotate and zoom in and zoom out **. Поэтому я беру холст для рисования изображения, но я думаю, что он не работает, тогда я прямо добавил свой URL-адрес image src (я знаю, что это не очень хороший подход) . Мне нужно нарисовать изображение с помощью холста, чтобы можно было вращать и масштабировать изображение. вот мой код https://codesandbox.io/s/6z651o698n

import React, { Component } from "react";
import ReactDOM from "react-dom";

import "./styles.css";

class App extends Component {
  constructor() {
    super();
    this.state = {
      src:
        "https://img.timesnownews.com/story/1542606525-Sachin_Shaw.png?d=600x450"
    };
  }

  componentDidMount() {
    console.info("d");

    const canvas = document.getElementById("canvas");
    var context = canvas.getContext("2d");
    var image = document.getElementById("image");
  }

  resetImage() {
    //load the  image in canvas if the image is loaded successfully
    const canvas = document.getElementById("canvas");
    const image = document.getElementById("image");
    const element = canvas.getContext("2d");
    const currentScale = Math.min(
      canvas.width / image.width,
      canvas.height / image.height
    );
  }
  clear() {
    const canvas = document.getElementById("canvas");
    const element = canvas.getContext("2d");
    element.clearRect(-2000, -2000, 5000, 5000);
  }
  drawImage() {
    const canvas = document.getElementById("canvas");
    const element = canvas.getContext("2d");
    clear();
    element.save();
    element.translate(canvas.width / 2, canvas.height / 2);
    element.translate(-canvas.width / 2, -canvas.height / 2);
    element.drawImage(
      image,
      canvas.width / 2 / currentScale - image.width / 2,
      canvas.height / 2 / currentScale - image.height / 2
    );
    element.restore();
  }
  zoomIn() {
    currentScale += 0.5;
    drawImage();
  }

  zoomIn() {
    currentScale -= 0.5;
    drawImage();
  }

  render() {
    console.info("r");
    return (
      <div>
        <button id = "zoomIn" onClick = {this.zoomIn}>
          {" "}
          Zoom In
        </button>
        <button id = "zoomIn" onClick = {this.zoomOut}>
          {" "}
          Zoom In
        </button>

        <canvas id = "canvas" height = "350" data-girar = "0">
          sdsd
        </canvas>
        <img id = "image" src = {this.state.src} />
      </div>
    );
  }
}

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);

** может быть, я сделал много ошибок здесь, потому что я новичок в реакции ** в настоящее время zoom in and zoom out functionality not working

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
669
1

Ответы 1

Предстоит проделать много работы, но вы можете начать со следующих шагов:

  1. Все вызовы методов должны начинаться с this., поэтому замените clear() и drawImage() на this.clear() и this.drawImage().
  2. Чтобы переменная currentScale сохранялась, вы можете сделать ее глобальной, свойством объекта или частью состояния реакции. Я предлагаю начать со свойства объекта, поэтому замените все вхождения currentScale на this.currentScale. Чтобы инициализировать это свойство, вы должны вызвать this.resetImage() в componentDidMount.
  3. Когда вы передаете обратные вызовы, как в onClick = {this.zoomIn}, вы должны привязать их к this. Есть несколько способов сделать это, самый простой - заменить на onClick = {this.zoomIn.bind(this)}.

Есть несколько мелких опечаток: у вас есть два метода zoomIn и нет объявления const image в drawImage.

Другие вопросы по теме