【发布时间】:2020-04-12 05:53:55
【问题描述】:
我有 3 个输入和加号按钮,当按下它时我想添加另外 3 个输入,所以他的状态,
这样的状态
state={
toolsUsed: [
{
id: (Math.random() * 150).toString(),
name: '',
price: '',
count: '',
},
{..},
],
}
在前 3 个输入组件中,我想在我添加一个更改值文本时用这个值设置状态!
但我试过了,但在更改文本后我进入了一个状态
toolsUsed => [" ","text"]
我想要达到的目标
toolsUsed => [{name:'text",count:'..',price:'....',id:'..'},{...}]
用户界面
这是我的代码
renderToolsUsed = () => {
const {toolsUsed} = this.state;
const prom = toolsUsed.map(({name, id, price, count}, i) => {
return (
<View>
<View style={styles.toolsItem}>
<TextInput
onChangeText={name =>
this.setState(
prevState => {
return {
...prevState,
toolsUsed: [prevState.toolsUsed[i].name, name],
};
},
() => console.log(this.state.toolsUsed),
)
}
value={name}
key={id}
/>
</View>
<View style={styles.toolsItem}>
<TextInput
onChangeText={count => this.setState({})}
value={count}
key={id}
/>
</View>
<View style={styles.toolsItem}>
<TextInput
onChangeText={price => this.setState({})}
value={price}
key={id}
/>
</View>
<TouchableOpacity onPress={() =>
this.setState(prevState => {
return {
...prevState,
toolsUsed: prevState.toolsUsed.length + 1,
};
})
}> **// heres i got error "toolsUsed.map not a function**
<Text>+</Text>
</TouchableOpacity>
</View>
);
});
return prom;
}
JSX
...
render(){
return(
<View style={styles.toolsContainer}>
<Text>
Tools
</Text>
{this.renderToolsUsed()}
</View>
);
}
编辑~1
也许 :D 求解加函数
onPress={() => {
let newInput = this.state.toolsUsed.length;
this.setState(prevState => ({
toolsUsed: prevState.toolsUsed.concat([newInput]),
}));
}
编辑~2
我添加了一个减号按钮来删除工具数组中的最后一个对象,
这里有两种方法来处理它,但我有一些 奇怪 在第一种方式它运作良好我不知道为什么!但是当我第一次评论 var newInput 时,不要删除最后一项
onPress={() => {
// first way
let newInput = this.state.toolsUsed.pop();
this.setState(prevState => ({
toolsUsed: prevState.toolsUsed.filter(
tool => tool.id !== id,
),
}));
// Second
let rowDeleted = [...this.state.toolsUsed];
rowDeleted.splice(-1, 1);
this.setState({toolsUsed: rowDeleted});
}}
【问题讨论】:
-
使用随机生成器生成唯一 id 不是一个好主意。
-
@Kobe 嗯,为什么?
-
为什么这是个好主意?如果您依赖于
id,那么您就是在埋葬一个错误,因为它不会经常发生,但它会发生,即生成相同的id。 -
好吧,我怎样才能生成
id -
从 0 开始,一路向上?这是一种常见的方法
标签: javascript arrays reactjs react-native react-native-android