@@ -147,8 +147,11 @@ const Ask = () => {
147147 if ( prefill || draft ) {
148148 if ( prefill ) {
149149 const file = fm < any > ( decodeURIComponent ( prefill ) ) ;
150- formData . title . value = file . attributes ?. title ;
151- formData . content . value = file . body ;
150+ setFormData ( ( prev ) => ( {
151+ ...prev ,
152+ title : { ...prev . title , value : file . attributes ?. title || '' } ,
153+ content : { ...prev . content , value : file . body || '' } ,
154+ } ) ) ;
152155 if ( ! queryTags && file . attributes ?. tags ) {
153156 // Remove spaces in file.attributes.tags
154157 const filterTags = file . attributes . tags
@@ -158,14 +161,19 @@ const Ask = () => {
158161 updateTags ( filterTags ) ;
159162 }
160163 } else if ( draft ) {
161- formData . title . value = draft . title ;
162- formData . content . value = draft . content ;
163- formData . tags . value = draft . tags ;
164- formData . answer_content . value = draft . answer_content ;
164+ setFormData ( ( prev ) => ( {
165+ ...prev ,
166+ title : { ...prev . title , value : draft . title || '' } ,
167+ content : { ...prev . content , value : draft . content || '' } ,
168+ tags : { ...prev . tags , value : draft . tags || [ ] } ,
169+ answer_content : {
170+ ...prev . answer_content ,
171+ value : draft . answer_content || '' ,
172+ } ,
173+ } ) ) ;
165174 setCheckState ( Boolean ( draft . answer_content ) ) ;
166175 setHasDraft ( true ) ;
167176 }
168- setFormData ( { ...formData } ) ;
169177 } else {
170178 resetForm ( ) ;
171179 }
@@ -231,17 +239,25 @@ const Ask = () => {
231239 return ;
232240 }
233241 questionDetail ( qid ) . then ( ( res ) => {
234- formData . title . value = res . title ;
235- formData . content . value = res . content ;
236- formData . tags . value = res . tags . map ( ( item ) => {
237- return {
238- ...item ,
239- parsed_text : '' ,
240- original_text : '' ,
242+ setFormData ( ( prev ) => {
243+ const updatedFormData = {
244+ ...prev ,
245+ title : { ...prev . title , value : res . title } ,
246+ content : { ...prev . content , value : res . content } ,
247+ tags : {
248+ ...prev . tags ,
249+ value : res . tags . map ( ( item ) => {
250+ return {
251+ ...item ,
252+ parsed_text : '' ,
253+ original_text : '' ,
254+ } ;
255+ } ) ,
256+ } ,
241257 } ;
258+ setImmData ( updatedFormData ) ;
259+ return updatedFormData ;
242260 } ) ;
243- setImmData ( { ...formData } ) ;
244- setFormData ( { ...formData } ) ;
245261 } ) ;
246262 } , [ qid ] ) ;
247263
@@ -255,10 +271,10 @@ const Ask = () => {
255271 ) ;
256272
257273 const handleTitleChange = ( e : React . ChangeEvent < HTMLInputElement > ) => {
258- setFormData ( {
259- ...formData ,
274+ setFormData ( ( prev ) => ( {
275+ ...prev ,
260276 title : { value : e . currentTarget . value , errorMsg : '' , isInvalid : false } ,
261- } ) ;
277+ } ) ) ;
262278 if ( e . currentTarget . value . length >= 10 ) {
263279 querySimilarQuestions ( e . currentTarget . value ) ;
264280 }
@@ -267,31 +283,31 @@ const Ask = () => {
267283 }
268284 } ;
269285 const handleContentChange = ( value : string ) => {
270- setFormData ( {
271- ...formData ,
286+ setFormData ( ( prev ) => ( {
287+ ...prev ,
272288 content : { value, errorMsg : '' , isInvalid : false } ,
273- } ) ;
289+ } ) ) ;
274290 } ;
275291 const handleTagsChange = ( value ) =>
276- setFormData ( {
277- ...formData ,
292+ setFormData ( ( prev ) => ( {
293+ ...prev ,
278294 tags : { value, errorMsg : '' , isInvalid : false } ,
279- } ) ;
295+ } ) ) ;
280296
281297 const handleAnswerChange = ( value : string ) =>
282- setFormData ( {
283- ...formData ,
298+ setFormData ( ( prev ) => ( {
299+ ...prev ,
284300 answer_content : { value, errorMsg : '' , isInvalid : false } ,
285- } ) ;
301+ } ) ) ;
286302
287303 const handleSummaryChange = ( evt : React . ChangeEvent < HTMLInputElement > ) =>
288- setFormData ( {
289- ...formData ,
304+ setFormData ( ( prev ) => ( {
305+ ...prev ,
290306 edit_summary : {
291- ...formData . edit_summary ,
307+ ...prev . edit_summary ,
292308 value : evt . currentTarget . value ,
293309 } ,
294- } ) ;
310+ } ) ) ;
295311
296312 const deleteDraft = ( ) => {
297313 const res = window . confirm ( t ( 'discard_confirm' , { keyPrefix : 'draft' } ) ) ;
@@ -413,9 +429,17 @@ const Ask = () => {
413429 const handleSelectedRevision = ( e ) => {
414430 const index = e . target . value ;
415431 const revision = revisions [ index ] ;
416- formData . content . value = revision . content ?. content || '' ;
417- setImmData ( { ...formData } ) ;
418- setFormData ( { ...formData } ) ;
432+ setFormData ( ( prev ) => {
433+ const updated = {
434+ ...prev ,
435+ content : {
436+ ...prev . content ,
437+ value : revision . content ?. content || '' ,
438+ } ,
439+ } ;
440+ setImmData ( updated ) ;
441+ return updated ;
442+ } ) ;
419443 } ;
420444 const bool = similarQuestions . length > 0 && ! isEdit ;
421445 let pageTitle = t ( 'ask_a_question' , { keyPrefix : 'page_title' } ) ;
0 commit comments