Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

139
Views
React Draft Wysiwyg always stays on undefined

I have an useEffect hook which will do an axios get api request and store in an useState

const [apiResponse, setApiResponse] = useState([]);

useEffect(() => {
    ... // inside of .then()
    setApiResponse(data.data.payload);
    ....
},[]);

apiResponse has an array of Object

[
    {
        userName: "user Name",
        description: "<p>lorem ipsum lorem ipsum lorem ipsum</p>",
        selected: "Yes",
    }
]

React Draft Wysiwyg

const blocksFromHTML = convertFromHTML(`${apiResponse.description}`);
const state = ContentState.createFromBlockArray(
    blocksFromHTML.contentBlocks,
    blocksFromHTML.entityMap
);

const [editorState, setEditorState] = useState(() =>
    EditorState.createWithContent(state)
);

const onEditorStateChange = (editorState) => {
    setEditorState(editorState);
    return draftToHtml(convertToRaw(editorState.getCurrentContent()));
};
....
return (
    ....
    <Editor
        toolbarClassName="toolbarClassName"
        wrapperClassName="ChannelDesscription"
        editorClassName="editorClassName"
        editorState={editorState}
        defaultEditorState={editorState}
        onEditorStateChange={onEditorStateChange}
    />
    ...
)

I am getting undefined printed on the Editor.

On console log, i am undefined on the first render and then the value is printed on the console.. but inside the editor it remains as undefined.

console.log(apiResponse.description)

What mistake am i making here ?

Thank you.

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

I can't verify that this is the issue based on the code, but my guess is the issue is with how initial state works with useState

Signature

const [state, setState] = useState(initialState)

Here initialState is only used to initialize the state--changes to initialState on subsequent renders do not impact the value of state.

First render

const [state, setState] = useState(0)
console.log(state) // 0

Second render

const [state, setState] = useState(1)
console.log(state) // 0

To change the state after the first render, you have to call setState.

Third render

const [state, setState] = useState(1)
console.log(state) // 0
setState(3)

Fourth render

const [state, setState] = useState(1)
console.log(state) // 3

My inkling is that in your case editorState is initialised before the request for the data has been completed--which means that it gets initialised with an undefined value. You have to use some other mechanism that initialValue to provide the value of the response to the state if you are not able to wait for the response to resolve before you initialise the editor state.

You can test out whether this is the issue by setting the editor state in the useEffect where you store the response.

useEffect(() => {
    ... // inside of .then()
    setApiResponse(data.data.payload);
    
    const { contentBlocks, entityMap } = convertFromHTML(apiResponse.description);
    setEditorState(
        EditorState.createWithContent(
            ContentState.createFromBlockArray(
                contentBlocks,
                entityMap
            )
        )
     )
    ....
},[]);

In your final implementation, make sure that you do not override the editor state by accident after the user has already made changes.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!