从 React 中的父 onfocus 方法在子组件上切换显示隐藏 class
Toggle show hide class on child component from parent onfocus method in React
我是 React 初学者。
我有一个具有多个输入字段的父组件(InputField 子组件)。 OnFocus 我想从父组件
中的方法将 Inputfield(InputFieldToolTip 组件)的子组件切换为 show/hide
目前,当我设置 showHide 的状态并通过 props 传入输入字段组件时,它会切换所有工具提示组件
如何在 React 中引用单个工具提示组件?在 jQuery 中,我只是给它一个 ID 并使用 Dom 选择器。
示例代码(请不要将此视为实际代码,它只是结构的代表以及当前正在传递的内容):
父组件
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './InputField.jsx';
class Parent extends React.Component {
constructor(props){
super(props);
this.state={
showHide: ' hide',
toolTip: 'This is a tooltip'
}
this.showHide = this.showHide.bind(this);
}
showHide(){
if(this.state.showHide === 'hide') {
this.setState({
showHide: 'show'
))};
} else {
this.setState({
showHide: 'hide'
});
}
}
render(){
return(
<div>
<InputField
name='input-1'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
<InputField
name='input-2'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
<InputField
name='input-3'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
</div>
)
}
}
输入字段组件
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './ToolTip.jsx';
export class InputField extends React.Component{
render(){
return(
<div>
<Input/>
<ToolTip
showHide={this.props.showHide}
toolTip={this.props.toolTip}
/>
</div>
)
}
}
工具提示组件
import React, {Component} from 'react';
export const ToolTip = (props) => {
return <div className={this.props.showHide}>{this.props.toolTip}</div>
}
您的问题是当前您的状态由所有组件共享。
showHide 属性对于所有输入和工具提示组件都是相同的。
我假设您想要的行为是在您聚焦输入时显示相应的工具提示。
你可以这样做,而不是在你的 parent 组件中有那个状态,把它放在每个 input/tooltip :
Parent
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './InputField.jsx';
class Parent extends React.Component {
render(){
return(
<div>
<InputField
name='input-1'
type="text"
tooltipText="Input1 Tooltip"
/>
<InputField
name='input-2'
type="text"
tooltipText="Input2 Tooltip"
/>
<InputField
name='input-3'
type="text"
tooltipText="Input3 Tooltip"
/>
</div>
)
}
}
输入字段
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './ToolTip.jsx';
export class InputField extends React.Component{
constructor(props){
super(props)
this.state = {
tooltipShown: false
}
this.showTooltip = this.showTooltip.bind(this)
this.hideTooltip = this.hideTooltip.bind(this)
}
showTooltip(){
this.setState({
tooltipShown: true
})
}
hideTooltip(){
this.setState({
tooltipShown: false
})
}
render(){
return(
<div>
<input onFocus={this.showTooltip} onBlur={this.hideTooltip} />
<ToolTip
shown={this.state.tooltipShown}
text={this.props.tooltipText}
/>
</div>
)
}
}
工具提示
export const ToolTip = (props) => {
return (
<div className={props.shown ? 'show' : 'hide'}>
{props.tooltipText}
</div>
)
}
现在每个 InputField
组件控制自己的工具提示组件。
他们可以接收工具提示的文本作为道具并将其传递给工具提示。
当您将焦点放在 InputField
上时,它会告诉要显示的工具提示,当失去焦点时 onBlur
将触发再次隐藏它。
请注意,我还将 InputField
中的 Input
更改为 input
,因为您似乎没有使用自定义 Input
组件。
我是 React 初学者。
我有一个具有多个输入字段的父组件(InputField 子组件)。 OnFocus 我想从父组件
中的方法将 Inputfield(InputFieldToolTip 组件)的子组件切换为 show/hide目前,当我设置 showHide 的状态并通过 props 传入输入字段组件时,它会切换所有工具提示组件
如何在 React 中引用单个工具提示组件?在 jQuery 中,我只是给它一个 ID 并使用 Dom 选择器。
示例代码(请不要将此视为实际代码,它只是结构的代表以及当前正在传递的内容):
父组件
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './InputField.jsx';
class Parent extends React.Component {
constructor(props){
super(props);
this.state={
showHide: ' hide',
toolTip: 'This is a tooltip'
}
this.showHide = this.showHide.bind(this);
}
showHide(){
if(this.state.showHide === 'hide') {
this.setState({
showHide: 'show'
))};
} else {
this.setState({
showHide: 'hide'
});
}
}
render(){
return(
<div>
<InputField
name='input-1'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
<InputField
name='input-2'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
<InputField
name='input-3'
OnFocus={this.showHide}
type="text"
showHide={this.state.showHide}
toolTip={this.state.toolTip}
/>
</div>
)
}
}
输入字段组件
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './ToolTip.jsx';
export class InputField extends React.Component{
render(){
return(
<div>
<Input/>
<ToolTip
showHide={this.props.showHide}
toolTip={this.props.toolTip}
/>
</div>
)
}
}
工具提示组件
import React, {Component} from 'react';
export const ToolTip = (props) => {
return <div className={this.props.showHide}>{this.props.toolTip}</div>
}
您的问题是当前您的状态由所有组件共享。 showHide 属性对于所有输入和工具提示组件都是相同的。
我假设您想要的行为是在您聚焦输入时显示相应的工具提示。
你可以这样做,而不是在你的 parent 组件中有那个状态,把它放在每个 input/tooltip :
Parent
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './InputField.jsx';
class Parent extends React.Component {
render(){
return(
<div>
<InputField
name='input-1'
type="text"
tooltipText="Input1 Tooltip"
/>
<InputField
name='input-2'
type="text"
tooltipText="Input2 Tooltip"
/>
<InputField
name='input-3'
type="text"
tooltipText="Input3 Tooltip"
/>
</div>
)
}
}
输入字段
import React from 'react';
import ReactDOM from 'react-dom';
import InputField from './ToolTip.jsx';
export class InputField extends React.Component{
constructor(props){
super(props)
this.state = {
tooltipShown: false
}
this.showTooltip = this.showTooltip.bind(this)
this.hideTooltip = this.hideTooltip.bind(this)
}
showTooltip(){
this.setState({
tooltipShown: true
})
}
hideTooltip(){
this.setState({
tooltipShown: false
})
}
render(){
return(
<div>
<input onFocus={this.showTooltip} onBlur={this.hideTooltip} />
<ToolTip
shown={this.state.tooltipShown}
text={this.props.tooltipText}
/>
</div>
)
}
}
工具提示
export const ToolTip = (props) => {
return (
<div className={props.shown ? 'show' : 'hide'}>
{props.tooltipText}
</div>
)
}
现在每个 InputField
组件控制自己的工具提示组件。
他们可以接收工具提示的文本作为道具并将其传递给工具提示。
当您将焦点放在 InputField
上时,它会告诉要显示的工具提示,当失去焦点时 onBlur
将触发再次隐藏它。
请注意,我还将 InputField
中的 Input
更改为 input
,因为您似乎没有使用自定义 Input
组件。