我有以下两个组件应用程序和它的孩子工具栏。得到的价值的投入和给父母在反应
工具栏包含一个表单和输入,我想将输入值直到应用程序组件的状态 - 但只有当用户确认它(在提交或输入等)时。
我目前的尝试不工作,因为我只得到一个代理和一个事件对象(这是有道理的)。我将如何做到这一点?
我没有使用Redux或类似的东西。
App.js
import React, {Component} from 'react'
import {render} from 'react-dom'
import {} from './styles/base.scss'
import ImageContainer from './components/Images'
import Toolbar from './components/Toolbar'
export default class App extends Component {
constructor(props) {
super(props);
// http://www.cloudypoint.com/Tutorials/discussion/javascript-how-to-update-parents-state-in-react/
this.setFolderPathHandler = this.setFolderPathHandler.bind(this);
}
setFolderPathHandler(e) {
e.preventDefault();
console.log(arguments);
// this.setState({
// xyz: input
// });
}
render() {
return (
<div>
<Toolbar setFolderPathHandler={this.setFolderPathHandler} />
<ImageContainer />
</div>
)
}
}
工具栏/ index.js
import React, { Component } from 'react';
import path from 'path';
class Toolbar extends Component {
render() {
return (
<nav className="toolbar">
<div className="column">
{/* START used to be it's own component */}
<form onSubmit={this.props.setFolderPathHandler}>
<div className="form-field">
<input type="text" className="folder-path" ref={(input) => this.input = input} />
<button><i className="fa fa-fw fa-2x fa-folder-open" aria-hidden="true"></i></button>
</div>
</form>
{/* END used to be it's own component */}
</div>
<div className="column">
<button><i className="fa fa-fw fa-2x fa-chevron-left" aria-hidden="true"></i></button>
<button><i className="fa fa-fw fa-2x fa-chevron-right" aria-hidden="true"></i></button>
</div>
</nav>
);
}
}
export default Toolbar;
我确实有输入作为一个单独的组件,但它是太混乱,我(我是新反应)。
“.folder-path”是你关心的输入吗?如果我们将整个组件缩减为一个元素(也可能是一个包装),它会是同一个问题吗?它使得它更容易接近(和复制) –
我认为你应该改变onSummit方法,像这样:'onSubmit = {()=> this.props.setFolderPathHandler()}'。这个想法是执行父母的方法 –