Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exporting canvas to image exports empty image #122

Closed
kevgathuku opened this issue Aug 14, 2017 · 32 comments
Closed

Exporting canvas to image exports empty image #122

kevgathuku opened this issue Aug 14, 2017 · 32 comments

Comments

@kevgathuku
Copy link

kevgathuku commented Aug 14, 2017

How can I export the underlying canvas to an image using toDataURL?
https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement/toDataURL
I've tried assigning a ref to the <Stage ref={stage => { this.konvaStage = stage }} /> component, but I keep getting an empty canvas image when I try to export the image using this piece of code. How can I accomplish this? Thanks

this.konvaStage.node.bufferCanvas.context.canvas.toDataURL()
@kevgathuku kevgathuku changed the title Exporting canvas to image Exporting canvas to image exports empty image Aug 14, 2017
@lavrton
Copy link
Member

lavrton commented Aug 14, 2017

class App extends React.Component {
  handleExportClick = () => {
    console.log(this.stageRef.getStage().toDataURL());
  }
  render() {
    return (
      <div>
      
      <Stage width={700} height={700} ref={node => { this.stageRef = node}}>
        <Layer>
            <MyRect/>
        </Layer>
      </Stage>
      <button style={{ position: 'absolute', top: '0'}} onClick={this.handleExportClick}>Export stage</button>
      </div>
    );
  }
}

http://jsbin.com/bevarosibo/3/edit?js,output

let me know if you still have any questions.

@lavrton lavrton closed this as completed Aug 14, 2017
@kevgathuku
Copy link
Author

Works like a charm. This has been bugging me for 3 days
Thanks @lavrton 😄

@devgreenroom
Copy link

devgreenroom commented Nov 6, 2020

Hi @lavrton I am having the same issue
<Stage width={window.innerWidth} height={window.innerHeight} ref={stageRef} onMouseDown={checkDeselect} onTouchStart={checkDeselect} > <Layer> {images.map((image, i) => { return ( <URLImage image={image} key={i} shapeProps={image} isSelected={image.src === selectedId} onSelect={() => { selectShape(image.src); }} onChange={(newAttrs) => { const image = images.slice(); image[i] = newAttrs; setImages(image); }} /> ) })} </Layer> </Stage>

` const save = () => {
let src = stageRef.current.toDataURL({ mimeType: 'image/png', width: window.innerWidth, height: window.innerHeight, quality: 1, pixelRadio: 2, });
console.log(src)

}`
Could you please help me with this

@lavrton
Copy link
Member

lavrton commented Nov 6, 2020

@devgreenroom do you have any errors or warnings?

@sharmavartika
Copy link

Hi @lavrton facing the same issue without errors and warnings

@lavrton
Copy link
Member

lavrton commented Nov 9, 2020

@sharmavartika demo?

@deadcoder0904
Copy link

deadcoder0904 commented Dec 22, 2020

@lavrton how do I convert your example in TypeScript?

Only any type is working:

import { Stage, Layer } from 'react-konva'
import type { Stage as StageType } from 'konva/types/Stage'

export class Konva extends React.Component {
	stageRef: any = React.createRef()
	
	handleExportClick = () => {
		console.log(this.stageRef.current!.getStage().toDataURL({ mimeType: 'image/jpeg', quality: 1 }))
	}

	return (
			<Stage
				width={win.width}
				height={win.height}
				ref={(node) => {
					this.stageRef = node
				}}
			>
			...
			</Stage>
	)
}

I tried doing React.createRef<StageType>() & it gives the following error:

(property) Konva.stageRef: React.RefObject
Type 'Stage | null' is not assignable to type 'RefObject'.
Type 'null' is not assignable to type 'RefObject'.

I also searched GitHub for examples with TS & I found some but they didn't work as well.

Would love to know the answer?

@lavrton
Copy link
Member

lavrton commented Dec 22, 2020

React.createRef<StageType>(null)

@deadcoder0904
Copy link

I already tried that. It says:

ts-error

@lavrton
Copy link
Member

lavrton commented Dec 22, 2020

What about this:

import * as React from "react";
import { Stage } from "react-konva";
import Konva from "konva";

export default class App extends React.Component {
  stageRef = React.createRef<Konva.Stage>();
  render() {
    return <Stage ref={this.stageRef} />;
  }
}

@deadcoder0904
Copy link

Nope. It gives another error:

bug

@lavrton
Copy link
Member

lavrton commented Dec 22, 2020

Well, take a look at my code. Your example of ref usage is not correct.

@deadcoder0904
Copy link

Whoops, that worked. My bad.

@deadcoder0904
Copy link

I can even use StageType. No need to use Konva.Stage :)

@till-valhaalla
Copy link

@deadcoder0904 Hey can you share your code for this query?

@deadcoder0904
Copy link

@till-valhaalla this is probably the answer & try implementing the next comments.

lemme know if that doesn't work out so i can find out what worked for me :)

@till-valhaalla
Copy link

I implemented this but i am using functional programming is there any result generated in that?

@deadcoder0904
Copy link

not sure what you are talking about???

@deadcoder0904
Copy link

deadcoder0904 commented Mar 3, 2022

anyways here's my complete code of the file that works fine:

import { observer } from 'mobx-react'
import React from 'react'
import { Layer, Stage, Rect } from 'react-konva'
import type { Stage as StageType } from 'konva/lib/Stage'

import {
	BrowserWindow,
	Shadow,
	URLBar,
	TrafficSignal,
	AddressBar,
	SiteImage,
} from '@/components/index'
import { useFrameItStore } from '@/store/index'
import type { Image } from '@/types/index'

interface IProps {
	className?: string
}

interface ForwardedRef {
	downloadImage: ({ name, extension, pixelRatio, suffix }: Image) => void
}

const downloadURI = (uri: string, name: string) => {
	const link = document.createElement('a')
	link.download = name
	link.href = uri
	document.body.appendChild(link)
	link.click()
	document.body.removeChild(link)
}

export const Konva = observer(
	React.forwardRef<ForwardedRef, IProps>(({ className }: IProps, forwardedRef) => {
		const {
			canvas,
			image: { show },
			background,
		} = useFrameItStore()
		const stageRef = React.useRef<StageType>(null)

		React.useImperativeHandle(
			forwardedRef,
			() => ({
				downloadImage: ({ name, extension, pixelRatio, suffix }: Image) => {
					const { transparent } = background // do not put it outside as it will always be `false` because of Closure
					transparent && stageRef.current?.findOne('.transparentBackground').hide()
					const options = {
						mimeType: `image/${extension}`,
						quality: 1,
						pixelRatio: pixelRatio * window.devicePixelRatio,
					}
					const img = stageRef.current?.getStage().toDataURL(options) as string
					const fileName = `${name === '' ? 'frameit' : name}${suffix}`
					downloadURI(img, fileName)
					transparent && stageRef.current?.findOne('.transparentBackground').show()
				},
			}),
			[]
		)

		return (
			<Stage ref={stageRef} className={className} width={canvas.width} height={canvas.height}>
				<Layer>
					{/* <Rect width={canvas.width} height={canvas.height} x={22} fill="papayawhip" /> */}
					<BrowserWindow />
					{show ? (
						<>
							<Shadow />
							<URLBar />
							<TrafficSignal />
							<AddressBar />
							<SiteImage />
						</>
					) : null}
				</Layer>
			</Stage>
		)
	})
)

@till-valhaalla
Copy link

i mean i implemented this using react functional programming but i get the error of TypeError: Cannot read properties of null (reading 'toDataURL') –

@till-valhaalla
Copy link

image
i get this error

@deadcoder0904
Copy link

this means your ref usage is incorrect. see my code & specifically see stageRef.current?.getStage().toDataURL(options)

i'm passing my ref from the parent as my download button is outside this component so want to trigger download from there but you should look more into how to use ref in react as that's what the error says: that your ref is null :)

@deadcoder0904
Copy link

read this for more info :)

@till-valhaalla
Copy link

Alright! Thankyou so much! :)

@deadcoder0904
Copy link

@till-valhaalla there's 1 change now that i've updated the versions:

change

import type { Stage as StageType } from 'konva/types/Stage'

to

import type { Stage as StageType } from 'konva/lib/Stage'

@till-valhaalla
Copy link

till-valhaalla commented Mar 7, 2022

actually i tried running it but it doesnt work for me.. could you guide me
this is my demo: https://myv1w0.csb.app/
but when u click save image it has some issues i have been stuck on this for a week

@deadcoder0904
Copy link

i got it working. highly recommend you making a minimal reproduction by removing all the unnecessary stuff so you can find the bug easily.

when i commented out link.click(), i found the uri logging in the console perfectly. try pasting this in browser:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAfQAAAH0CAYAAADL1t+KAAAAAXNSR0IArs4c6QAAIABJREFUeF7t3Qm4ldMex/F/yJRUSELImJlC5qE5RUgIyb0JmTLPc5I5VBRCSKIyJG4yZigZKjPJPCUhISm6z2/tZ5/2OWefOmftM/zPu7/v89znUnu9e63P/z379671rn3UWLx48WLjQAABBBBAAIFqLVCDQK/W9aPzCCCAAAIIBAECnQsBAQQQQACBBAgQ6AkoIkNAAAEEEECAQOcaQAABBBBAIAECBHoCisgQEEAAAQQQINC5BhBAAAEEEEiAAIGegCIyBAQQQAABBAh0rgEEEEAAAQQSIECgJ6CIDAEBBBBAAAECnWsAAQQQQACBBAgQ6AkoIkNAAAEEEECAQOcaQAABBBBAIAECBHoCisgQEEAAAQQQINC5BhBAAAEEEEiAAIGegCIyBAQQQAABBAh0rgEEEEAAAQQSIECgJ6CIDAEBBBBAAAECnWsAAQQQQACBBAgQ6AkoIkNAAAEEEECAQOcaQAABBBBAIAECBHoCisgQEEAAAQQQINC5BhBAAAEEEEiAAIGegCIyBAQQQAABBAh0rgEEEEAAAQQSIECgJ6CIDAEBBBBAAAECnWsAAQQQQACBBAgQ6AkoIkNAAAEEEECAQOcaQAABBBBAIAECBHoCisgQEEAAAQQQINC5BhBAAAEEEEiAAIGegCIyBAQQQAABBAh0rgEEEEAAAQQSIECgJ6CIDAEBBBBAAAECnWsAAQQQQACBBAgQ6AkoIkNAAAEEEECAQOcaQAABBBBAIAECBHoCisgQEEAAAQQQINC5BhBAAAEEEEiAAIGegCJW1hBq1KiR9a0WL15c6M+zvY7XLCHCp/BlxLXBtSGB9M9F0euhsj7fkvA+BHoSqlhJYyDQi9/QEEaEUWYYZf4ocm3EXRsEevwHOoEeb5d3LbmDzruSM2AEKk2Az5fcqQn03A3z5gz8wOVNqRkoApUuwOdL7uQEeu6GnAEBBBBAIEcBAj1HQO1DWMwDi9wVOQMCCCCAAAJVLECgV3EBeHsEEEAAAQTKQ4BALw9FzoEAAggggEAVCxDoVVyA6vT2POOqTtWirwggkG8CBHq+VTyH8RLoOeDRFAEElirA50vuFwiBnrth3pyBH7i8KTUDRaDSBfh8yZ2cQM/dMG/OUFk/cJ//+rmtvtLqtuYqa9rP83+2X/76xTapt0mpnP9d/K99Nfcr26juRqV6fRJeJKNVa65qK6+wcrHhfDfvO6uzch2rVbNWcKy3cr1qMeTFttje+u4t22ndnVz096c/f7IVl18xXJccFSNQWZ8vFdN7H2cl0H3UoVr0oiw/cLe8foud/r/Tbe1aa9vwQ4Zby41b2pnjz7SbJ99sm6+5uT106EO24zo7Fhv30KlD7bgnjrPnjnnOVlphJeswvIOdsNMJdm2ra5dppMBqe3/b8KH77DHPLvP11f0Funk579nzrOFqDe3uqXfbkdseaRfudWG4CZL9ox89am03aWuf/fJZuMlptm4zG3/0ePfDXvDPAjt53Mmma2HxZYX/OwEV1fk/F/4ZboqyHWM+HGOdH+4crskWjVtUVBeizvvP4n9M10HN5WpGtffUqCyfL5767akvBLqnaiSsL+veuK4dvOXBNmj/QQUjq3FFDbu53c3Wu3nvEkdbu19te/yIx8OH5wEjDrCt6m9VqkDXCa999VqbMHNChQa6Zo81LPt/qKYySzh91nTr+GBH+/qMr+3xjx+3Qx8+1H6/8Hfb7vbtQsiPO2pcmJnreGfWO3bKU6fYxP9MDP/uZQwleX0y5xPbYuAWywz0bOMo69hueO0GUzCet8d5Bd1RSC5XY7mCf697TV0bc/iY6EAver6i4y5tnzPPs/DfhdZpRCe7qsVV1rRh08q89CrkvQj03FkJ9NwNOUMJAo36N7KDmhxkA9oPKBTot7a/1U7d5VTTcvAxjx5j38771nZYZwe7p9M9Ydm4pECfM3+O9Xyip6224mo27Ydpdvm+l9shWx5S6N0V6JqtNqjVwCZ9M8mu2PeKMGvN1rbj5h1tpzt2srkL5oaZ6xGjjrAf[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vh6mtrppUaDr8YF+4Y6+I3/aaamvp111VWrTn25WtGGvrIGu8WjDoL6apg152hSnGwcdmTN0PaOX9cUXp2bvHAggkAgBAj0RZXQ6CH09S1+bWtYvllEoaolZS+l6RqzfLqeNXPqz9KFl8v33T83Q0xvNdH59LUyz3IYNSxfoCv4HH1zyWn0lTDcKm25aukDXIwD95raxY1Ovz5yFZ55B+wMeeii1N0CzZe1CVxttytONig7dMGiMb7+d+ndtUrv77tT4dWQLdO3uT7fXazKX3PXvX3+d2nOg0NZzfN0gyUmrGOuskzqvbp60f0DfNkh/hc7pJUS3EECg9AIEeumteGVFCygsNavM/F51RbynbiA0I9bMXMv9MYfa6zx6Fl2aQwG/ww5m3bubaWNe5qGbGPVj5ZVLc6ayvUZfl9PX6vTsPnMnv1Y4sn0vvWxn59UIIOBIgEB3VAy6kiCB/v1Ts379hjoto+vrdvpaXtHNf+U5ZG2A04a5//439T19/dIYLa23aZOatXMggECiBQj0RJeXwVWZgDaj6Ze1KMB1aCe/Ql7hWlGHHj3ol8RoqV+HQl1fTdP37vVcnQMBBBItQKAnurwMrsoFtINev2Andmk/dgAsqcfK0Q6BaitAoFfb0tFxBBBAAAEElggQ6FwNCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXQIUJPPLII9ajRw8bOXKktW/fvtD7LF682Fq0aGF//PGHvfbaa7bCCitUWD84MQIIIJAPAgR6PlS5isbYq1cvGzx4sF1wwQV29dVXF+rF3LlzrW7duuHPvv32W1t33XWrqJe8LQIIIJAMAQI9GXV0OQoC3WVZ6BQCCCRUgEBPaGE9DCvXQP/3339tueWWq7ShlNf76XFCjRo1Kqzf5dXPCusgJ0YAgSoRINCrhD0/3jQm0OfPn299+vSxxx9/3D744APbeOONrU2bNta3b19bY401Atw999xjY8eOtSFDhlj9+vXDn91+++3hzw866CC78MILw59pWb9nz57WqlUrO/7447Oia7n/3HPPtWnTpoX307HVVlvZySefHNrWrFkz/Nm9995rY8aMsQceeMBmzZoV3nvq1Kl2xRVX2J577hleo7+/6aab7NVXX7XatWvb3nvvbTfffLNtuummJRb8/PPPt19++cVpLZ1RAAAY4ElEQVQGDBhgK664YsHrPvroIzvzzDND3/bdd18rjYuCvnv37rb99tvb2WefXXCuv//+244++mjbY489rHfv3vlx8TFKBPJQgEDPw6JX1pDTgX7ssceGYMo8FGIKGB3pZ+iLFi2y3Xff3d54440QiM2aNQsh++OPP9raa69tH374YQj1ww47zLThTiGv8Na50mGv83322WfWuHHjEPInnXRSeL025mU77rvvvhCCOtSf77//PrTXMWjQoNBex2677WaTJ0+2M844w/r3719wKoX4wQcfHPYKaLw6dBMye/ZsmzdvXhjHF198Uah/mf3YZZddwnh1MyKn9NGxY0cbN26cPfjgg9alS5dSuXz++efhvWWlm4708c4774SQX3/99e3rr7+urPLzPgggUMkCBHolg+fT26UDfVljTgf6XXfdFWbFCiXNctdZZ52wC17h9uKLL9o555xj1113XZjNnnbaadapUyd77LHH7OWXXw6z4fShP9PfaYf93XffHV5/yimnZO3GwoULQ4gr7NLL+zfccEN4r7322ssmTpwY2qWDV//coUMHu+yyy2zrrbe2VVdd1X7//fewqU8Bng7mv/76yw499NAQylpxuPjii7O+/y233GKnn366HXDAAfbEE0+E1+hmQKGsQ+d86KGHSuWiG5FNNtmkWKBPnz7ddthhBwJ9WRci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](https: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vh6mtrppUaDr8YF+4Y6+I3/aaamvp111VWrTn25WtGGvrIGu8WjDoL6apg152hSnGwcdmTN0PaOX9cUXp2bvHAggkAgBAj0RZXQ6CH09S1+bWtYvllEoaolZS+l6RqzfLqeNXPqz9KFl8v33T83Q0xvNdH59LUyz3IYNSxfoCv4HH1zyWn0lTDcKm25aukDXIwD95raxY1Ovz5yFZ55B+wMeeii1N0CzZe1CVxttytONig7dMGiMb7+d+ndtUrv77tT4dWQLdO3uT7fXazKX3PXvX3+d2nOg0NZzfN0gyUmrGOuskzqvbp60f0DfNkh/hc7pJUS3EECg9AIEeumteGVFCygsNavM/F51RbynbiA0I9bMXMv9MYfa6zx6Fl2aQwG/ww5m3bubaWNe5qGbGPVj5ZVLc6ayvUZfl9PX6vTsPnMnv1Y4sn0vvWxn59UIIOBIgEB3VAy6kiCB/v1Ts379hjoto+vrdvpaXtHNf+U5ZG2A04a5//439T19/dIYLa23aZOatXMggECiBQj0RJeXwVWZgDaj6Ze1KMB1aCe/Ql7hWlGHHj3ol8RoqV+HQl1fTdP37vVcnQMBBBItQKAnurwMrsoFtINev2Andmk/dgAsqcfK0Q6BaitAoFfb0tFxBBBAAAEElggQ6FwNCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXAAIIIIAAAgkQINATUESGgAACCCCAAIHONYAAAggggEACBAj0BBSRISCAAAIIIECgcw0ggAACCCCQAAECPQFFZAgIIIAAAggQ6FwDCCCAAAIIJECAQE9AERkCAggggAACBDrXQIUJPPLII9ajRw8bOXKktW/fvtD7LF682Fq0aGF//PGHvfbaa7bCCitUWD84MQIIIJAPAgR6PlS5isbYq1cvGzx4sF1wwQV29dVXF+rF3LlzrW7duuHPvv32W1t33XWrqJe8LQIIIJAMAQI9GXV0OQoC3WVZ6BQCCCRUgEBPaGE9DCvXQP/3339tueWWq7ShlNf76XFCjRo1Kqzf5dXPCusgJ0YAgSoRINCrhD0/3jQm0OfPn299+vSxxx9/3D744APbeOONrU2bNta3b19bY401Atw999xjY8eOtSFDhlj9+vXDn91+++3hzw866CC78MILw59pWb9nz57WqlUrO/7447Oia7n/3HPPtWnTpoX307HVVlvZySefHNrWrFkz/Nm9995rY8aMsQceeMBmzZoV3nvq1Kl2xRVX2J577hleo7+/6aab7NVXX7XatWvb3nvvbTfffLNtuummJRb8/PPPt19++cVpLZ1RAAAY4ElEQVQGDBhgK664YsHrPvroIzvzzDND3/bdd18rjYuCvnv37rb99tvb2WefXXCuv//+244++mjbY489rHfv3vlx8TFKBPJQgEDPw6JX1pDTgX7ssceGYMo8FGIKGB3pZ+iLFi2y3Xff3d54440QiM2aNQsh++OPP9raa69tH374YQj1ww47zLThTiGv8Na50mGv83322WfWuHHjEPInnXRSeL025mU77rvvvhCCOtSf77//PrTXMWjQoNBex2677WaTJ0+2M844w/r3719wKoX4wQcfHPYKaLw6dBMye/ZsmzdvXhjHF198Uah/mf3YZZddwnh1MyKn9NGxY0cbN26cPfjgg9alS5dSuXz++efhvWWlm4708c4774SQX3/99e3rr7+urPLzPgggUMkCBHolg+fT26UDfVljTgf6XXfdFWbFCiXNctdZZ52wC17h9uKLL9o555xj1113XZjNnnbaadapUyd77LHH7OWXXw6z4fShP9PfaYf93XffHV5/yimnZO3GwoULQ4gr7NLL+zfccEN4r7322ssmTpwY2qWDV//coUMHu+yyy2zrrbe2VVdd1X7//fewqU8Bng7mv/76yw499NAQylpxuPjii7O+/y233GKnn366HXDAAfbEE0+E1+hmQKGsQ+d86KGHSuWiG5FNNtmkWKBPnz7ddthhBwJ9WRci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)

so it actually worked but then i got this error:

Konva error: Unable to get data URL. Failed to execute 'toDataURL' on 'HTMLCanvasElement': Tainted canvases may not be exported. For more info read https://konvajs.org/docs/posts/Tainted_Canvas.html.

which is documented well.

so i did check point no. 3 where if you use useImage, you should put anonymous in the 2nd position.

you did put it in 2 places but forgot to put it in the background image place as you had 3 uses of useImage() so i did just that & it worked.

demo → https://codesandbox.io/s/elastic-ardinghelli-wxss8n?file=/src/App.js

@till-valhaalla
Copy link

Omg,THANKYOU SOO MUCH!
I can't thankyou enough! 😀
i would definitely try to make the code as minimal as much as i can,as i just recently started react and coding, This is my first project i got from my company and it's in testing phase i would remove my code sandbox project as it's against their policy to upload it online. I would appreciate it if you take down that code sandbox as well 😄
I would like to get in touch with you 👍 if that is possible as well.
I should have checked for the background image i think i might have forgotten about that one :)
Thankyou once again for helping me out so glad the coding community is so helpful! 😃

@deadcoder0904
Copy link

cool, i'll delete it...nice progress for someone just starting :)

@till-valhaalla
Copy link

Thanks again! 😄 i was wondering if there is any other way to contact you?

@deadcoder0904
Copy link

you can click on my github profile to find my twitter but if you are looking for programming help, best way is to post on stackoverflow or reddit or other specific forums online altho happy to point in the right direction :)

@till-valhaalla
Copy link

Oh thats great! :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants