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

السؤال

نشر

لدي نموذج يحتوي على 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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...