Чтобы получить доступ к этому атрибуту, вам нужно немного отразить:
var type = typeof(UserPromotion);
var member = type.GetMember(Model.JobSeeker.Promotion.ToString());
var attributes = member[0].GetCustomAttributes(typeof(DisplayAttribute), false);
var name = ((DisplayAttribute)attributes[0]).Name;
Я рекомендую обернуть этот метод в методе расширения или выполнить это в модели представления.
Вы не можете изменить реквизит непосредственно внутри компонента - реквизит может быть получен только из родительского компонента, но не может быть изменен, поэтому вы не можете сделать: 118] Кроме того, вы ссылаетесь на this.props.emailRef
в своей библиотеке, тогда как на клавиатуре отсутствует реквизит emailRef
- у нее есть реквизит textInput
.
Попробуйте это:
constructor(props) {
super(props);
this.emailRef = React.createRef();
this.state = {
value: "Initial Input"
};
this.handleInput = this.handleInput.bind(this);
}
handleInput(input) {
this.setState({ value: input });
}
render() {
return (
...
<Keyboard textInput={this.emailRef} onInput={this.handleInput} />
<TextInput ref={this.emailRef} value={this.state.value} />
...
);
}
Внутри библиотеки:
<Button
text="change value"
onClick={() => {
this.props.onInput(this.props.textInput.current.props.value + "q");
}}
/>
Я думаю, что вам нужен контролируемый вход. Вот как я это сделаю:
constructor(props) {
super(props);
this.emailRef = React.createRef(); // might not need this
this.state = {
value: ''
}
}
<TextInput
value={this.state.value}
onChangeText={(text) => this.setState({text})}
placeHolder="Email Address"
blurOnSubmit={false}
/>
<Button
text="change value"
onPress={() => {
// just use `this.state.value` to do whatever you need with it
}}
/>