【发布时间】:2018-07-11 04:22:54
【问题描述】:
我有一个组件 InputArea 和 state = {input: ''}
然后我将其中几个组件映射到一个容器中,并将它们写入state = {inputAreas: []}
现在,如何在容器中获取输入?记录 this.state.inputAreas[0] 会返回如下对象:
{$$typeof: Symbol(react.element), type: ƒ, key: "1", ref: null, props: {…}, …}
在元素中显示如下:
<input type="text" class="form-control" name="input" value="abc">
使用 this.state.prefooterArea[0].value 给出未定义。
我也尝试将输入从组件传递到容器作为道具,但它显示getInput is not a function。据我了解,这与我在容器中使用 map 的事实有关。我不能在这个项目中使用 redux。
组件代码
class PrefooterAreaInput extends Component {
state = {
input: ''
}
textChangedHandler = (event) => {
let newState = {};
newState[event.target.name] = event.target.value;
this.setState(newState);
}
render() {
return (
<div>
<input
className="form-control"
type="text"
name="input"
value = {this.state.input}
onChange={this.textChangedHandler}
/>
</div>
)
}
}
容器代码
class DescriptionFrame extends Component {
state = {,
prefooterArea: [<PrefooterAreaInput key={1}/>]
};
addFooterInputHandler = event => {
event.preventDefault();
if (this.state.prefooterArea.length < prefooterInputFieldsMax) {
var newPrefooterArea = this.state.prefooterArea.map(
inputField => inputField
);
newPrefooterArea.push(
<PrefooterAreaInput key={this.state.prefooterArea.length + 1} />
);
this.setState({ prefooterArea: newPrefooterArea });
}
};
removeFooterInputHandler = event => {
event.preventDefault();
if (this.state.prefooterArea.length > 1) {
var newPrefooterArea = this.state.prefooterArea.map(
inputField => inputField
);
newPrefooterArea.splice(newPrefooterArea.length - 1);
this.setState({ prefooterArea: newPrefooterArea });
}
render() {
// want to get this.state.prefooterArea[0]'s value
return (
<div>
{this.state.prefooterArea}
<a
className="nav-link"
href=""
onClick={this.addFooterInputHandler}
>
Add More
</a>
<a
className="nav-link"
href=""
onClick={this.removeFooterInputHandler}
>
Remove Last
</a>
</div>
);
}
}
【问题讨论】:
-
你能详细解释一下你想要完成什么吗?提供更多信息
-
我正在尝试在容器中获取输入值。容器状态中有一个组件列表,每个组件都以自己的状态存储输入。
-
但是为什么要引用整个元素,为什么不只存储输入值呢?
-
@MarioNikolaus 是的。
key是道具吗?那么只有您可以将其添加为自定义组件的属性。因为 that(PrefooterAreaInput) 不是在JSX.HTMLElement类别的组件中构建的。无需在this.state.input的输入中分配valueattr。
标签: javascript reactjs