As I understand it, onFocus
should be called when the input box is clicked into, and onBlur
should be called when something else becomes the focus.
My intentions: I would like to call a function that, when activated by a click, it will .concat
the message string of the input box in focuse, but I can't get the onFocus
or onBlur
to work.
From what I've found searching around, this should do the trick, but doesn't.
import React, { Component } from 'react'
class SocialPost extends Component {
state = {
message: this.props.socialPost.message,
focus: false
}
_onBlur() {
setTimeout(() => {
if (this.state.focus) {
this.setState({
focus: false,
});
}
}, 0);
}
_onFocus() {
if (!this.state.focus) {
this.setState({
focus: true,
});
}
}
render() {
return (
<div className='...'>
<div className='...'>
...
<input
onFocus={this._onFocus()}
onBlur={this._onBlur()}
type='text'
value={this.state.message}
onChange={...}/>
...
</div>
</div>
)
}
}
export default SocialPost
onFocus
and onBlur
called when the component is rendered before I click/unclick them?onFocus
and onBlur
to work, is is there another way to focus on the activated input box?Use the React. FocusEvent<HTMLElement> type to type the onFocus and onBlur events in React. The FocusEvent interface is used for onFocus and onBlur events.
You can add tabIndex={0} to outermost div in order to dismiss keyboard from input. If the element that has the onBlur effect and tabindex is created onClick of another element, it does not automatically gets focus when it appears. Thus, you may need to focus it using element. focus() after creating the element.
onBlur triggers when focus is lost from the input element in context. In React. js, we bind event handlers by passing a method defined in the component to be called accordingly. .bind(this) is called in order to retain the value of this and expose component methods within the event handler function such as this.
In React, the onFocus event is called when the element receives focus and onBlur event is called when focus has left the element. There are 4 types of native focus events, focus/blur which do not bubble and focusin/focusout which bubble.
Change this:
onFocus={this._onFocus()}
onBlur={this._onBlur()}
to this:
onFocus={this._onFocus}
onBlur={this._onBlur}
2.You cannot declare component's state like that. It has to be done in constructor. Also if you want to refer to SocialPost's this
you have to bind it. Imo the best place to do it is in the constructor.
The whole code should look like this:
import React, { Component } from 'react'
class SocialPost extends Component {
constructor (props) {
super(props)
this.state = {
message: props.socialPost.message,
focus: false
}
this._onBlur = this._onBlur.bind(this)
this._onFocus = this._onFocus.bind(this)
}
_onBlur() {
setTimeout(() => {
if (this.state.focus) {
this.setState({
focus: false,
});
}
}, 0);
}
_onFocus() {
if (!this.state.focus) {
this.setState({
focus: true,
});
}
}
render() {
return (
<div className='...'>
<div className='...'>
...
<input
onFocus={this._onFocus}
onBlur={this._onBlur}
type='text'
value={this.state.message}
onChange={...}/>
...
</div>
</div>
)
}
}
export default SocialPost
Change
onFocus={this._onFocus()}
onBlur={this._onBlur()}
to
onFocus={this._onFocus}
onBlur={this._onBlur}
or
onFocus={this._onFocus.bind(this)}
onBlur={this._onBlur.bind(this)}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With