react-textarea-autosize icon indicating copy to clipboard operation
react-textarea-autosize copied to clipboard

How to pass JSX code into it as children?

Open DaCao opened this issue 2 years ago • 1 comments

I am using it like this:

<Textarea
  autoFocus
  placeholder={(formState.commentBody && formState.commentBody !== '') ? formState.commentBody : intl.get('issue_details_placeholder_add_a_comment')}
  value={formState.commentBody}
  onChange={handleChange('commentBody')}
  ref={$textareaRef}
/>

what gets displayed in the textarea is just formState.commentBody and Textarea is defined as:

import React, { forwardRef } from 'react';
import TextareaAutoSize from 'react-textarea-autosize';
import { StyledTextarea } from './Styles';

const Textarea = forwardRef(({ className, invalid, onChange, ...textareaProps }, ref) => (
  <StyledTextarea className={className} invalid={invalid}>
    <TextareaAutoSize
      {...textareaProps}
      onChange={event => onChange(event.target.value, event)}
      ref={ref || undefined}
    />
  </StyledTextarea>
));

export default Textarea;

Now, instead of passing a string (formState.commentBody) as value into Textarea, I want to pass some jsx code:

<blockquote>
	this is a customizable text and clickable within textarea 
</blockquote>

into <textarea> as its children, such that it would be equivalent to :

<TextareaAutoSize>
	<blockquote>
		this is a customizable text and clickable within textarea 
	</blockquote>
</TextareaAutoSize>

The final goal is to be able to display block code inside the textarea. Does this library support it? How can I achieve this?

I tried to code inside the TextareaAutoSize component directly like this:

const Textarea = forwardRef(({ className, invalid, onChange, ...textareaProps }, ref) => (
  <StyledTextarea className={className} invalid={invalid}>
    <TextareaAutoSize
      {...textareaProps}
      onChange={event => onChange(event.target.value, event)}
      ref={ref || undefined}
    >

      <blockquote>
        hahaha
      </blockquote>

    </TextareaAutoSize>
  </StyledTextarea>
));

export default Textarea;

However it is displaying:

[object Object] Screen Shot 2022-10-18 at 4 26 20 PM

Why is this happening?

DaCao avatar Oct 18 '22 07:10 DaCao

This component renders <textarea/> and that doesn't accept any children. You are looking for a library support contenteditable elements

Andarist avatar Oct 18 '22 09:10 Andarist