我正在为自己开发一个学校管理应用程序。 我班上的所有学生都被列在一个Flatlist中,旁边有他们父母的电话号码,这样我就可以在学生不在时给他们发短信。
我有一个带有Listitems的 FlatList ,每个Listitems都包含一个内置 Text 子元素的Touchopacity组件。
成功将短信发送给学生的父母(smsParent方法)后,我想在 TouchOpacity 及其 Text 子项(操纵他们的样式道具)上设置NativeProps。我使用ref =(()=> ...)来引用 Touchopacity ,然后 this.props.children (只有1个孩子)来到它的 Text 孩子。
然而,我不能使用setNativeProps(= undefined)。 但是,当我在 Text 上使用ref =(()=> ...)然后引用它时,setNativeProps在其父/的情况下工作/喜欢。
为什么我不能在childEl.props.children引用它时对孩子使用setNativeProps()?(只有1个孩子,在调试器中检查,它已被正确识别)
请阅读smsParent方法中的评论
/ *抱歉插入一个片段 - 代码插入是疯狂格式化的
/ **代码简化/
class SingleClassPage extends Component {
buttons = new Array();
constructor(props) {
super(props);
this.state = { students: [] };
this.smsParent = this.smsParent.bind(this);
}
componentDidMount() {
//fetch students from api and setState..
this._getStudentsList();
}
_getStudentsList() {
// ...
}
//flatlist item
ListEl(props) {
return (
<View>
<TouchableOpacity ref={el => { let a = props.item.attId + 'att'; props.buttons[a] = el; }}
style={[styles.buttonDef, (props.item.phone_parent ? styles.buttonBlue : styles.buttonGray)]}
onPress={() => { props.smsSendHandler(props.item, 'attendance', a) }}>
<Text style={props.item.phone_parent ? styles.buttonTextLight : styles.buttonTextDark}>
{props.item.smsAttSent ? 'sms sent' : 'sms send'}
</Text>
</TouchableOpacity>
</View>
)
}
render() {
return (
<View style={{ flex: 1, }}>
<FlatList
data={this.state.students}
extraData={this.state}
keyExtractor={item => item.attId}
renderItem={({ item }) => <this.ListEl buttons={this.buttons} item={item} smsSendHandler={this.smsParent} />}
/>
<BusyIndicator />
</View>
);
}
smsParent(student, msgCategory, smsButton) {
//call myjava module and upon successful callback call below:
let parEl = this.buttons[smsButton];
//childEl is an object with props.children set to text 'sms sent/send' when I watch its value in debugger
//so it's correctly identified
let childEl = parEl.props.children;
// WORKS
parEl.setNativeProps({ style: { backgroundColor: 'green' } });
// OOPS
childEl.setNativeProps({ style: { color: 'black' } });
}
}
EDIT1 发布错误的屏幕截图(也作为对下面Dyo建议的回应 - 同样的错误Dyo ......)
答案 0 :(得分:0)
我认为你必须遍历孩子才能传递给他们nativeProps(即使只有一个孩子):
import urllib.request
def dl_jpg(url, file_path, file_name):
full_path = file_path + file_name + ".jpg"
urllib.request.urlretrieve(url, full_path)
url = input("Enter img URL to download:")
file_name = input("Enter file name to save as:")
def _new_folder(dir_name):
if not os.path.exists(dir_name):
os.makedirs(dir_name)
return
_new_folder(images)
dl_jpg(url, "images/", file_name)