3 回答
TA贡献1828条经验 获得超6个赞
在 React 中,key
是一个保留的 prop 名称。
[...] 未定义试图从组件(即渲染函数或
propTypes
)访问 this.props.key
https://reactjs.org/warnings/special-props.html
这可能是它在后续渲染中不起作用的原因——我很惊讶它在第一次渲染中完全起作用!
这工作正常:
// https://codepen.io/d4rek/pen/PoZRWQw
import { nanoid } from 'https://cdn.jsdelivr.net/npm/nanoid/nanoid.js'
const Child = ({ id }) => {
console.log(`within component: ${id}`)
const cb = () => console.log(`in callback: ${id}`)
return <button onClick={cb}>Click me</button>
}
const Parent = () => {
const [id, setId] = React.useState(null)
React.useEffect(() => {
setId(nanoid(6))
}, [])
return (<Child id={id} />)
}
ReactDOM.render(<Parent />, document.body)
TA贡献1880条经验 获得超4个赞
你的不工作的原因:道具是绑定的,this
但是你定义的回调有它自己的范围,因此有它自己的this
. 因此,您需要为该范围提供值。您可以通过使用组件的本地状态来做到这一点。由于 React 中有一些很好的钩子可以让你轻松完成,你应该使用它们来记住回调:
React.useCallback(() =>{console.log(key);}, [key]);
请注意在key
更改时更新回调的依赖数组。这里的范围很好。
TA贡献1784条经验 获得超7个赞
import React, { useCallback } from 'react';
const callback = useCallback(() => {
// this isn't working, key is undefined
console.log("value within callback: " + key);
}, [key]);
添加回答
举报