按钮事件在反应中不起作用,传递转发参考
Button Event not worlking in react, passing forwaring ref
我正在使用 react 和 react-bootstrap 以及 react-select。
我有一个问题,当我点击按钮时,控制台上没有显示,也没有执行任何操作。
Input.js 功能组件是 Hero.js 功能组件的子组件。
所以hero.js是父组件,Input.js是子组件。
而我的按钮在父组件中(Hero.js)。
所以我在我的按钮处理程序上使用父到子组件的转发引用。
我在 Input.js 中使用 react-select 输入,我想在单击按钮时聚焦。
单击按钮时控制台也不显示。
这里是Hero.js(父组件)
import React, { useState} from "react";
import "../App.css";
import Input from "./Input";
import Btnfill from "./Btnfill";
function Hero() {
const [Infocus, setInfocus] = useState();
const focusInput = () => {
console.log(Infocus.current);
Infocus.focus();
}
return (
<>
<Input
icon={Search}
cname={{ iconavailable: "input", noIcon: "input-notIcon" }}
placeholder="Search Industries"
ref={setInfocus}
/>
<Btnfill text="Search" size="larger" onClick={focusInput} />
</>
);
}
export default Hero;
这里是Input.js
import React, { useState, useEffect} from "react";
import Select from "react-select";
const Input = React.forwardRef((props, refrence) => {
// Input select options
const options = [
{ value: "chocolate", label: "Chocolate" },
{ value: "strawberry", label: "Strawberry" },
{ value: "vanilla", label: "Vanilla" },
];
return (
<div>
<Select
defaultValue={selectedOption}
onChange={onChangeEvent}
options={options}
className={props.icon ? props.cname.iconavailable : props.cname.noIcon}
placeholder={props.placeholder}
ref={refrence}
/>
</div>
);
})
export default Input;
您想使用 ref,但您在 Hero.js 中实际做的是 - 您正在定义状态并向下传递 set-state 函数。
您需要做的是:
- 在 Hero.jsx 中定义新引用:
const inputRef = useRef();
- 在您的按钮点击处理程序中设置焦点。为此,您需要访问 ref 的当前 属性:
const focusInput = () => inputRef.current.focus();
- 改为传递 ref:
<Input ... ref={inputRef} />
我正在使用 react 和 react-bootstrap 以及 react-select。
我有一个问题,当我点击按钮时,控制台上没有显示,也没有执行任何操作。
Input.js 功能组件是 Hero.js 功能组件的子组件。
所以hero.js是父组件,Input.js是子组件。
而我的按钮在父组件中(Hero.js)。
所以我在我的按钮处理程序上使用父到子组件的转发引用。
我在 Input.js 中使用 react-select 输入,我想在单击按钮时聚焦。
单击按钮时控制台也不显示。
这里是Hero.js(父组件)
import React, { useState} from "react";
import "../App.css";
import Input from "./Input";
import Btnfill from "./Btnfill";
function Hero() {
const [Infocus, setInfocus] = useState();
const focusInput = () => {
console.log(Infocus.current);
Infocus.focus();
}
return (
<>
<Input
icon={Search}
cname={{ iconavailable: "input", noIcon: "input-notIcon" }}
placeholder="Search Industries"
ref={setInfocus}
/>
<Btnfill text="Search" size="larger" onClick={focusInput} />
</>
);
}
export default Hero;
这里是Input.js
import React, { useState, useEffect} from "react";
import Select from "react-select";
const Input = React.forwardRef((props, refrence) => {
// Input select options
const options = [
{ value: "chocolate", label: "Chocolate" },
{ value: "strawberry", label: "Strawberry" },
{ value: "vanilla", label: "Vanilla" },
];
return (
<div>
<Select
defaultValue={selectedOption}
onChange={onChangeEvent}
options={options}
className={props.icon ? props.cname.iconavailable : props.cname.noIcon}
placeholder={props.placeholder}
ref={refrence}
/>
</div>
);
})
export default Input;
您想使用 ref,但您在 Hero.js 中实际做的是 - 您正在定义状态并向下传递 set-state 函数。
您需要做的是:
- 在 Hero.jsx 中定义新引用:
const inputRef = useRef();
- 在您的按钮点击处理程序中设置焦点。为此,您需要访问 ref 的当前 属性:
const focusInput = () => inputRef.current.focus();
- 改为传递 ref:
<Input ... ref={inputRef} />