اذهب إلى المحتوى
  • 0

كتابة متحكمات الاحداث بشكل افضل

عمر سالم2

السؤال

لدي نموذج يحتوي على 8 مكونات للإدخال النصي. أحتاج إلى معالجة كل واحد، ولكن بدون كتابة دالة لكل مدخل نصي.

import * as React from 'react';
import { Button, Text, TextInput, View } from 'react-native';

class InsuranceInformation extends React.Component {
	constructor(props) {
		super(props);

		this.state = {
			inputs: [
				{ type: 'text', label: 'الأسم الأول', value: '' },
				{ type: 'text', label: 'الأسم الثاني', value: '' },
				{ type: 'date', label: 'تاريخ الميلاد', value: '' },
				{ type: 'text', label: 'العنوان (1)', value: '' },
				{ type: 'text', label: 'العنوان (2)', value: '' },
				{ type: 'number', label: 'رقم الجوال', value: '' },
				{ type: 'text', label: 'رقم البطاقة', value: '' },
				{ type: 'number', label: 'رقم التأمين السابق', value: '' }
			]
		};

		this.handleSubmit = this.handleSubmit.bind(this);
	}

	handleSubmit(e) {}

	render() {
		const { title } = this.props;
		return (
			<View>
				<Text>{title}</Text>
				{
					this.state.inputs.map(input => (
						<TextInput
							onChangeText={() => {}} // ماذا اكتب هنا؟
							placeholder={input.label} />
					))
				}
				<Button
					onPress={this.handleSubmit}
					title="إرسال" />
			</View>
		);
	}
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

نقوم بعمل دالة تقوم بتعديل قيمة الحقل في ال state هذا هو المثال بالشرح 

import * as React from 'react';
import { Button, Text, TextInput, View } from 'react-native';

export default class InsuranceInformation extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      inputs: [
        // أولاً نضيف معرفات لكل حقل لكي نستهدف الحقل به وفي حالتنا سيكون id
        { id: 1, type: 'text', label: 'الأسم الأول', value: '' },
        { id: 2, type: 'text', label: 'الأسم الثاني', value: '' },
        { id: 3, type: 'date', label: 'تاريخ الميلاد', value: '' },
        { id: 4, type: 'text', label: 'العنوان (1)', value: '' },
        { id: 5, type: 'text', label: 'العنوان (2)', value: '' },
        { id: 6, type: 'number', label: 'رقم الجوال', value: '' },
        { id: 7, type: 'text', label: 'رقم البطاقة', value: '' },
        { id: 8, type: 'number', label: 'رقم التأمين السابق', value: '' }
      ]
    };

    this.handleSubmit = this.handleSubmit.bind(this);
  }

  updateFieldValue = (id, value) => {
    // نقوم بالبحث عن الحقل الذي نكتب فيه ونعدل قيمته 
    const modifiedInputs = this.state.inputs.map(input => {
      if(input.id === id) {
        input.value = value;
      }

      return input;
    })

    // ثم نعطي الحقول بالتعديلات الجديدة لل state
    this.setState({ inputs: modifiedInputs })
  }

  handleSubmit(e) {}

render() {
  const { title } = this.props;

  return (
    <View>
    <Text>{title}</Text>
    {
    this.state.inputs.map(input => (
      <TextInput
        value={input.value}
        // نقوم بعمل دالة تقوم بتعديل قيمة الحقل في ال state
        onChangeText={text => this.updateFieldValue(input.id, text)} 
        placeholder={input.label} 
      />
      ))
    }
    <Button
      onPress={this.handleSubmit}
      title="إرسال" 
    />
  </View>
	);
  }
}

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...