第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何添加在 React 組件中編輯文本的功能?

如何添加在 React 組件中編輯文本的功能?

紫衣仙女 2022-11-03 10:33:24
所以這是我正在嘗試創(chuàng)建的用戶功能:1.)用戶雙擊文本 2.)文本變成用戶可以編輯文本的輸入字段 3.)用戶點(diǎn)擊輸入,提交后,文本被更新以進(jìn)行編輯文本?;旧?,它只是一個(gè)編輯功能,用戶可以在其中更改某些文本塊。所以這是我的問(wèn)題 - 我可以通過(guò)雙擊將文本轉(zhuǎn)換為輸入字段,但是如何獲取提交和呈現(xiàn)的編輯文本?我的父組件 App.js 存儲(chǔ)了更新 App 狀態(tài)的函數(shù)(updateHandler)。更新的信息需要從 Tasks.jsx 組件傳遞,這是處理文本輸入的地方。我還應(yīng)該指出,一些道具正在通過(guò) TaskList 發(fā)送到 Tasks。代碼如下:應(yīng)用程序.jsimport React, {useState} from 'react';import Header from './Header'import Card from './Card'import cardData from './cardData'import Dates from './Dates'import Tasks from './Tasks'import Footer from './Footer'import TaskList from './TaskList'const jobItems= [  {      id:8,      chore: 'wash dishes'  },  {      id:9,      chore: 'do laundry'  },  {      id:10,      chore: 'clean bathroom'  }]function App() {  const [listOfTasks, setTasks] = useState(jobItems)  const updateHandler = (task) => {    setTasks(listOfTasks.map(item => {      if(item.id === task.id) {        return {          ...item,          chore: task.chore        }      } else {        return task      }    }))  }const cardComponents = cardData.map(card => {  return <Card key = {card.id} name = {card.name}/>})return (  <div>    <Header/>    <Dates/>    <div className = 'card-container'>    {cardComponents}    </div>    <TaskList jobItems = {listOfTasks} setTasks = {setTasks} updateHandler = {updateHandler}/>    <div>      <Footer/>    </div></div>)}export default App;任務(wù).jsximport React, {useState} from 'react'function Tasks (props) {const [isEditing, setIsEditing] = useState(false)    return(        <div className = 'tasks-container'>            {                isEditing ?                 <form>                <input type = 'text' defaultValue = {props.item.chore}/>                 </form>                : <h1 onDoubleClick ={()=> setIsEditing(true)}>{props.item.chore}</h1>            }        </div>            )}export default Tasks任務(wù)列表.jsximport React from 'react'import Tasks from './Tasks'
查看完整描述

4 回答

?
慕村9548890

TA貢獻(xiàn)1884條經(jīng)驗(yàn) 獲得超4個(gè)贊

您忘記了輸入元素上的 onChange 處理程序來(lái)設(shè)置項(xiàng)目的雜項(xiàng)值。


Tasks.jsx 必須如下所示


import React, {useState} from 'react'


function Tasks (props) {


const [isEditing, setIsEditing] = useState(false)


const handleInputChange = (e)=>{

    // console.log( e.target.value );

    // your awesome stuffs goes here

}


    return(

        <div className = 'tasks-container'>

            {

                isEditing ? 

                <form>

                <input type = 'text' onChange={handleInputChange} defaultValue = {props.item.chore}/> 

                </form>

                : <h1 onDoubleClick ={()=> setIsEditing(true)}>{props.item.chore}</h1>

            }

        </div>

        

    )

}


export default Tasks


查看完整回答
反對(duì) 回復(fù) 2022-11-03
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

因此,首先,我鼓勵(lì)您不要在input字段和divs 之間切換,而是使用可內(nèi)容編輯的div。然后你只需使用該onInput屬性來(lái)調(diào)用一個(gè)setState函數(shù),如下所示:


function Tasks ({item}) {

    return(

        <div className = 'tasks-container'>

            <div contenteditable="true" onInput={e => editTask(item.id, e.currentTarget.textContent)} >

                {item.chore}

            </div>

        </div> 

    )

}


然后,在父組件中,您可以定義editTask為一個(gè)函數(shù),該函數(shù)通過(guò)其 id 查找項(xiàng)目并將其替換為新內(nèi)容(在原始任務(wù)數(shù)組的副本中,而不是原始數(shù)組本身。


此外,您應(yīng)該避免在組件之間重命名變量。( listOfTasks-> jobItems)。這增加了不必要的開(kāi)銷,并且您不可避免地會(huì)在某些時(shí)候混淆哪個(gè)變量連接到哪個(gè)變量。而是說(shuō),<MyComponent jobItems={jobItems} >或者如果您想允許更大的抽象<MyComponent items={jobItems} >,然后您可以將組件重用于作業(yè)以外的可列出項(xiàng)目。


查看完整回答
反對(duì) 回復(fù) 2022-11-03
?
拉丁的傳說(shuō)

TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超8個(gè)贊

有關(guān)工作示例,請(qǐng)參見(jiàn)沙箱:


https://codesandbox.io/s/practical-lewin-sxoys?file=/src/App.js


您的 Task 組件需要一個(gè) keyPress 處理程序來(lái)在按下 enter 時(shí)將 isEditing 設(shè)置為 false:


const handleKeyPress = (e) => {

    if (e.key === "Enter") {

      setIsEditing(false);

    }

  };

您的 updateHandler 也應(yīng)該傳遞給輸入的 onChange 屬性,而不是 defaultValue,而是使用 value。它還需要重新配置以接收 onChange 事件,并且您可以使用索引映射任務(wù)以找到它們的狀態(tài):


const updateHandler = (e, index) => {

    const value = e.target.value;

    setTasks(state => [

      ...state.slice(0, index),

      { ...state[index], chore: value },

      ...state.slice(index + 1)

    ]);

  };

最后,TaskList 似乎是一個(gè)不必要的中間人,因?yàn)樗泄δ芏荚?App 和 Task 之間;您可以直接將任務(wù)渲染到具有您選擇的 className 的 div 中。


查看完整回答
反對(duì) 回復(fù) 2022-11-03
?
紅糖糍粑

TA貢獻(xiàn)1815條經(jīng)驗(yàn) 獲得超6個(gè)贊

react-edit-text是我創(chuàng)建的一個(gè)包,它完全符合您的描述。

它在 React 中提供了一個(gè)輕量級(jí)的可編輯文本組件。

還提供現(xiàn)場(chǎng)演示。


查看完整回答
反對(duì) 回復(fù) 2022-11-03
  • 4 回答
  • 0 關(guān)注
  • 383 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)