老師 關於react hook的問題

老師 關於react hook的問題

# 具体遇到的问题
問題如下,可以指導我能怎麼修改嗎能回答下列問題嗎? 沒有思路QQ
# 报错信息的截图

# 相关课程内容截图

# 尝试过的解决思路和结果

# 粘贴全部相关代码,切记添加代码注释(请勿截图)

/* eslint-disable */

import React, { useState, useContext } from "react";

import "./styles.css";


export const AppContext = React.createContext();


/*

 # 目標

   1. 用戶可修改文字框的值

   2. 按下 Change Value 鈕也能改變文字框的值

 

 # 題目

   1. 請描述發生的問題?

   2. 發生問題的原因?

   3. 針對此問題的解法?

   4. 是否有其它方式可從根本避免此問題發生?

   5. 有其它想法或觀察嗎?

*/


function ContextInput() {

const [context, _] = useContext(AppContext);

const [inputData, setInputData] = useState(context);


return (

<div>

     <div>Context value: {inputData}</div>

     <input

       type="text"

       value={inputData}

       onChange={(e) => setInputData(e.value)}

     />

   </div>

);

}


function ContextButton() {

const [_, setContext] = useContext(AppContext);

return (

<button onClick={() => setContext(Math.random().toString())}>

     Generate Random number

   </button>

);

}


export default function App() {

const [context, setContext] = useState(0);

return (

<AppContext.Provider value={[context, setContext]}>

     <ContextInput />

     <ContextButton />

   </AppContext.Provider>

);

}


正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好, 直接写e.target.value表示获取输入框的值,但是我们的目的是修改context值,所以需要使用它对应的方法_进行修改,注意:_是一个函数的名字哦。


http://img1.sycdn.imooc.com//climg/5fab4511098ce89f08360579.jpg

祝学习愉快~

好帮手慕慕子 2020-11-10 19:59:12

同学你好,因为在input子组件中又单独定义了状态,导致无法实现效果。建议:只在父组件中使用useState定义状态,在子组件中直接针对父组件传递过来的值,使用useContext共享状态修改值就可以了,不需要在输入框中单独定义状态了。

另外,获取输入框的值应该是使用e.target.value,而不是e.value。

建议修改:

http://img1.sycdn.imooc.com//climg/5faa7fb3092c1b4008830608.jpg

http://img1.sycdn.imooc.com//climg/5faa80880ac94f5303460110.jpg

祝学习愉快~

  • 提问者 weixin_慕雪0272820 #1
    謝謝老師 老師太厲害了Q_Q 再請教為什麼onChange = (e) => _(e.target.value) 要寫_(e.target.value) 不能直接寫e.target.value
    2020-11-11 06:51:24
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师