Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在React应用程序中外部化选择选项?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何在React应用程序中外部化选择选项?

Javascript 如何在React应用程序中外部化选择选项?,javascript,reactjs,Javascript,Reactjs,我有一个React Redux应用程序,它有各种选择框。现在我把它硬编码在js文件中。 我需要以下页面:编辑配置文件,查看配置文件,搜索选择。。 我认为在每一页中都有这么长的列表是没有意义的 如何将这些选项外部化-我想将其存储在单个JS文件中,并仅在需要时使用这些选项 请注意,我的问题不是如何创建选择组件。我已经在下面做了。问题是如何从外部来源提取列表 我的代码示例是: import React from 'react' import PropTypes from 'prop-types' im

我有一个React Redux应用程序,它有各种选择框。现在我把它硬编码在js文件中。 我需要以下页面:编辑配置文件,查看配置文件,搜索选择。。 我认为在每一页中都有这么长的列表是没有意义的

如何将这些选项外部化-我想将其存储在单个JS文件中,并仅在需要时使用这些选项

请注意,我的问题不是如何创建选择组件。我已经在下面做了。问题是如何从外部来源提取列表

我的代码示例是:

import React from 'react'
import PropTypes from 'prop-types'
import Select from '../others/input/select'

const InputCasteChristian = ({ value, change }) => (
  <div className="edit_caste_div">
    <Select
      placeholder="Select option"
      value={value}
      valueChange={e => change('caste', e)}
      className="edit_caste mb-2"
    >
      <option value="" disabled selected>
        Select Caste
      </option>
      <option>Anglo-Indian</option>
      <option>Born Again</option>
      <option>Brethren</option>
      <option>CSI</option>

      <option>Unspecified</option>
    </Select>
  </div>
)

InputCasteChristian.propTypes = {
  value: PropTypes.string.isRequired,
  change: PropTypes.func.isRequired,
}

export default InputCasteChristian
更新

import ReligionInput from './religion-input'
...
...
    return (
      <div>
        <Title
          value="Edit profile"
..
...
    <div className="profile_right">
       ....
    <ReligionInput value={religion} change={this.change} />
...
...
..

const mapStateToProps = store => ({
  ud: store.User.user_details,
  tags: store.User.tags,
  session: store.User.session,
})

export default connect(mapStateToProps)(EditProfile)
export { EditProfile as PureEditProfile }

您应该能够以数组的形式传递选项,并且这个组件不需要知道如何创建这个列表,您只需在这里传递它。 使用映射功能,您可以创建选项列表

import React from 'react'
import PropTypes from 'prop-types'
import Select from '../others/input/select'

const InputCasteChristian = ({ value, change, options }) => (
    <div className="edit_caste_div">
        <Select
            placeholder="Select option"
            value={value}
            valueChange={e => change('caste', e)}
            className="edit_caste mb-2"
        >
            {options.map((a, index) => {
                return (
                    <option key={index}>{a}</option>
                );
            })}
        </Select>
    </div>
)

InputCasteChristian.propTypes = {
    value: PropTypes.string.isRequired,
    change: PropTypes.func.isRequired,
}

export default InputCasteChristian
这是调用者组件,请参见如何填充选项:

import React, { Component } from 'react';
import InputCasteChristian from './InputCasteChristian';
import { connect } from 'react-redux';

class InputCasteChristianCaller extends Component {
    constructor(props) {
        super(props);
        this.state = {
            value: '',
            options: props.options
        };
    }
    render() {
        return (
            <InputCasteChristian
                value={this.state.value}
                change={() => { }}
                options={this.state.options} />
        );
    }
}

function mapStateToProps(state, ownProps) {
    return {
        options: state.options
    };
}

function mapDispatchToProps(dispatch) {
    return {
        dispatch: dispatch
    };
}

export default connect(mapStateToProps, mapDispatchToProps)(InputCasteChristianCaller);

我在构造函数中创建了一个数组对象,您可以像我一样创建这个列表,也可以从ajax调用中获得它,…。

有道理,但我看不到您的答案中传递了选项。应该将其存储为json文件吗?它是从哪里进口的?另外,在视图页面中显示数据库中的值为0、1、2等的选项如何。。。如何将其转换为上面的值?constinputcastechristian={value,change,options}=>参见此行?传递选项数组就像传递更改函数或值对象一样。你能分享调用这个组件的代码吗?谢谢。我已经添加了调用此组件的相关代码。我看到你在传递选项,但我想知道选项列表是从哪里来的。。我的意思是更新答案中的项目很好。谢谢你的更新。我将从许多组件调用它。如何避免将这些选项数组添加到每个组件?我认为选项列表应该在一个地方,而不是3个来电者,如果我从3个地方打电话。你同意吗?