2 回答
TA贡献1830条经验 获得超9个赞
如果我正确理解您的问题,您是在询问如何根据它在平面列表数据中的位置有条件地设置一个道具值。基本上,您希望第一个PlaceInput组件显示“您的位置”的“输入”文本值,其余的则什么都没有。
更新 APIPlaceInput以接受另一个道具以指示是否显示默认值。
PlaceInput.js
...
<TextInput
key={this.id}
autoCorrect={false}
autoCapitalize='none'
style={styles.inputStyle}
placeholder='Search your places'
onChangeText={(input) => {
this.setState({destinationInput: input});
this.getPlacesDebounced(input);
}}
value={this.state.destinationInput}
defaultValue={this.props.displayDefaultValue ? this.props.defaultValue : null}
/>
...
并传入是否有任何特定的PlaceInput内容应该显示它。由于您只想显示第一个而其余的不显示,因此使用数组索引是一个不错的起点。在这里,我们可以利用这样一个事实,即在javascript 0中是一个虚假值,而所有其他数字都是真实的。使用!indexthen !0is true while !1, !2, etc, are all false。
MainMap.js
<FlatList
data={this.state.numOfInput}
keyExtractor={(item, index) => item}
renderItem={({ index, item }) => {
return(
<PlaceInput
id={item}
defaultValue="Your Location"
displayDefaultValue={!index} // index 0 is falsey, all others truthy
onDelete={this.onDeleteSearch}
showDirectionOnMap={this.showDirectionOnMap}
userLatitude={userLatitude}
userLongitude={userLongitude}
userLocationDisplayed={this.state._userLocationDisplayed}
/>
)
}}
/>
TA贡献1804条经验 获得超7个赞
我利用了德鲁里斯的回答,但它不起作用
我发现了为什么它不起作用,因为valueprop 的值是由this.state.destinationInput构造函数中的 state 中的 " " 设置的。value我再次在道具中使用 Drew 的方式,并且它有效
<TextInput
key={this.id}
autoCorrect={false}
autoCapitalize='none'
style={styles.inputStyle}
placeholder='Search your places'
onChangeText={(input) => {
this.setState({destinationInput: input});
this.getPlacesDebounced(input);
}}
value={this.props.displayDefaultValue ? this.props.defaultValue : this.state.destinationInput}
/>
添加回答
举报