我是一个新的React,我正在尝试将属性从父函数传递到子函数。我传递的参数“square_state”和“setSquare_state”在useSquare或handle_square_click函数中无法识别。我使用下面的https://designcode.io/react-hooks-handbook-props作为引用。
const handle_square_click = (props) => {
props.setSquare_state(player)
setGetplayer(true)
}
const useSquare = (square_state, setSquare_state) => {
// Hook for square state management and rendering
return (
<button className="square" onClick={<handle_square_click setSquare_state={setSquare_state}/> }>
{square_state}
</button>
);
}
// ------------------------------------------------------------------
// Board Function
const Board = ({player}) => {
let status = "Next Player : " + player
const [square1_state, setSquare1_state] = useState(1);
return (
<div>
<div className="status">{status}</div>
<div className="board-row">
<useSquare
square_state={square1_state}
setSquare_state={setSquare1_state}
/>
2条答案
按热度按时间j2datikz1#
这里有许多问题。
use
为前缀的函数应该保留给 custom hooks。如果你有一个返回React组件的函数,你应该遵循React标准,给予它一个大写的名字,一个不以use
开头的名字--例如,你可以调用square函数Square
。然后孩子将它们视为一个对象的属性,其中对象是函数的第一个参数--就像你处理
handle_square_click
一样。应该是
(使用非常常见的camelCasing约定)
handle_square_click
是一个普通函数,而不是一个组件,因此onClick={<handle_square_click
没有任何意义。在Square中声明该函数,并在传递onClick
属性时仅引用该函数。在Square中声明该函数以避免必须四处传递内容。player
,但它不在作用域中。您需要从父级向下传递它。(setGetplayer
可能也需要向下传递,但它的声明没有显示在问题的代码中)和
wwodge7n2#
这不是在React或hook中使用子组件的方法!你应该以大写字母开头命名你的(自定义)组件,并在组件中调用hook。
因此,作为(在我键入此内容时出现的上一个答案),您应该重构代码。