When I load my react app I get this error in the console.
Warning: Failed form propType: You provided a
value
prop to a form field without anonChange
handler. This will render a read-only field. If the field should be mutable usedefaultValue
. Otherwise, set eitheronChange
orreadOnly
. Check the render method ofAppFrame
.
My AppFrame component is below:
class AppFrame extends Component {
render() {
return (
<div>
<header className="navbar navbar-fixed-top navbar-shadow">
<div className="navbar-branding">
<a className="navbar-brand" href="dashboard">
<b>Shire</b>Soldiers
</a>
</div>
<form className="navbar-form navbar-left navbar-search alt" role="search">
<div className="form-group">
<input type="text" className="form-control" placeholder="Search..."
value="Search..."/>
</div>
</form>
<ul className="nav navbar-nav navbar-right">
<li className="dropdown menu-merge">
<span className="caret caret-tp hidden-xs"></span>
</li>
</ul>
</header>
<aside id="sidebar_left" className="nano nano-light affix">
<div className="sidebar-left-content nano-content">
<ul className="nav sidebar-menu">
<li className="sidebar-label pt20">Menu</li>
<li className="sidebar-label">
<IndexLink to="/" activeClassName="active">Dashboard</IndexLink>
</li>
<li className="sidebar-label">
<Link to="/fixtures" activeClassName="active">Fixtures</Link>
</li>
<li className="sidebar-label">
<Link to="/players" activeClassName="active">Players</Link>
</li>
</ul>
</div>
</aside>
<section id="content_wrapper">
<section id="content" className="table-layout animated fadeIn">
{this.props.children}
</section>
</section>
</div>
)
}
}
export default AppFrame;
I am struggling to work out what I am actually doing wrong here. The application starts up and works but I am trying to remove all console warning/errors.
You've put a value directly in your search input, I don't see the benefit there because you already have a placeholder. You could either remove the value from:
<input type="text" className="form-control" placeholder="Search..." value="Search..."/>
to this:
<input type="text" className="form-control" placeholder="Search..." />
Or if you think you must have it, set it as defaultValue
:
<input type="text" className="form-control" placeholder="Search..." defaultValue="Search..."/>
Documentation: https://facebook.github.io/react/docs/uncontrolled-components.html#default-values
If you don't take the input value from the user by this input field, then you need to make this field read-only by setting the defaultValue.
In case if you want to set the value and involve user interaction. You should send onChange event to update the state of initial value. This is like two-way binding as angular support.
state = {
keyword: 'test'
}
inputChangedHandler = (event) => {
const updatedKeyword = event.target.value;
// May be call for search result
}
render() {
return (
<input
type="text"
placeholder="Search..."
value={this.state.keyword}
onChange={(event)=>this.inputChangedHandler(event)} />
);
}
the warning appears because you set a value attribute on the input and don't provide any handler to update it. there is two way to do so:
you can use a ref to get form values from the DOM.
https://reactjs.org/docs/uncontrolled-components.html
set onChange handler function.
const [email, SetEmail] = useState("");
<Form.Control
onChange={e => SetEmail(e.target.value)}
type="email"
name="email"
value={email || ""}
/>
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