如何有条件地向React组件添加属性?

如果满足特定条件,是否有办法仅将属性添加到R​​eact组件?

我应该在渲染后基于ajax调用将required和readOnly属性添加到表单元素中,但是由于readOnly =“ false”与完全省略该属性不同,因此我看不到如何解决此问题。

下面的示例应解释我想要的内容,但无法正常工作(解析错误:意外的标识符)。

var React = require('React');

var MyOwnInput = React.createClass({
    render: function () {
        return (
            <div>
                <input type="text" onChange={this.changeValue} value={this.getValue()} name={this.props.name}/>
            </div>
        );
    }
});

module.exports = React.createClass({
    getInitialState: function () {
        return {
            isRequired: false
        }
    },
    componentDidMount: function () {
        this.setState({
            isRequired: true
        });
    },
    render: function () {
        var isRequired = this.state.isRequired;

        return (
            <MyOwnInput name="test" {isRequired ? "required" : ""} />
        );
    }
});

#1楼

这应该起作用,因为在ajax调用之后您的状态将改变,并且父组件将重新呈现。

render : function () {
    var item;
    if (this.state.isRequired) {
        item = <MyOwnInput attribute={'whatever'} />
    } else {
        item = <MyOwnInput />
    }
    return (
        <div>
            {item}
        </div>    
    );
}

#2楼

显然,对于某些属性,如果您传递给它的值不真实,React足够聪明,可以忽略该属性。 例如:

var InputComponent = React.createClass({
    render: function() {
        var required = true;
        var disabled = false;

        return (
            <input type="text" disabled={disabled} required={required} />
        );
    }
});

将导致:

<input type="text" required>

更新:如果有人对如何/为什么发生这种情况感到好奇,可以在ReactDOM的源代码中找到详细信息,特别是在DOMProperty.js文件的第30167行。


#3楼

考虑这篇JSX Depth文章,您可以通过这种方式解决您的问题

if (isRequired) {
  return (
    <MyOwnInput name="test" required='required' />
  );
}
return (
    <MyOwnInput name="test" />
);

#4楼

只是丢了另一个选择,但是@juandemarco的答案通常是正确的。

用自己喜欢的方式构建对象:

var inputProps = {
  value: 'foo',
  onChange: this.handleChange
};

if (condition) inputProps.disabled = true;

以传播方式渲染,也可以选择通过其他道具。

<input 
    value="this is overridden by inputProps" 
    {...inputProps} 
    onChange={overridesInputProps}
 />

#5楼

这是通过React-Bootstrap (版本:0.32.4)使用BootstrapButton的示例。

var condition = true;

return (
  <Button {...(condition ? {bsStyle: 'success'} : {})} />
);

根据条件,将返回{bsStyle: 'success'}{} 。 然后,散布运算符会将散布的返回对象的属性散布到Button组件。 在错误的情况下,由于返回的对象上不存在任何属性,因此不会将任何内容传递给组件。


基于以下@Andy Polhill的评论的替代方法:

var condition = true;

return (
  <Button bsStyle={condition ? 'success' : undefined} />
);

唯一的小差别是,在第二个示例中,内部组件<Button/>props对象将具有值为undefined的键bsStyle


#6楼

您可以使用同一快捷方式,该快捷方式用于添加/删除组件(的一部分)( {isVisible && <SomeComponent />} )。

class MyComponent extends React.Component {
  render() {
    return (
      <div someAttribute={someCondition && someValue} />
    );
  }
}

#7楼

晚会了。 这是另一种选择。

var condition = true;

var props = {
  value: 'foo',
  ...( condition && { disabled: true } )
};

var component = <div { ...props } />;

或其内联版本

var condition = true;

var component = (
  <div
    value="foo"
    { ...( condition && { disabled: true } ) } />
);

#8楼

晚会了。

假设如果条件为真,我们想添加一个自定义属性(使用aria- *或data- *):

{...this.props.isTrue && {'aria-name' : 'something here'}}

假设我们想在条件为true的情况下添加样式属性:

{...this.props.isTrue && {style : {color: 'red'}}}

#9楼

如果使用es6,则可以这样编写。

// first, create a wrap object.
const wrap = {
    [variableName]: true
}
// then, use it
<SomeComponent {...{wrap}} />

#10楼

在React中,您可以有条件地渲染Components以及它们的属性,例如props,className,id等。

在React中,最好使用“三元运算符”,它可以帮助您有条件地渲染Components。

示例还显示了如何有条件地渲染Component及其样式属性

这是一个简单的例子:

 class App extends React.Component { state = { isTrue: true }; render() { return ( <div> {this.state.isTrue ? ( <button style={{ color: this.state.isTrue ? "red" : "blue" }}> I am rendered if TRUE </button> ) : ( <button>I am rendered if FALSE</button> )} </div> ); } } ReactDOM.render(<App />, document.getElementById("root")); 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script> <div id="root"></div> 


#11楼

这是我的一种方法。

有条件的

<Label
    {...{
      text: label,
      type,
      ...(tooltip && { tooltip }),
      isRequired: required
    }}
/>

我仍然更喜欢使用常规的方式传递道具,因为(在我看来)在没有任何条件的情况下它更具可读性。

没有条件的

<Label text={label} type={type} tooltip={tooltip} isRequired={required} />
### 回答1: 可以使用React中的state和事件处理程序来实现这个功能。以下是一个简单的示例代码: ```jsx import React, { useState } from 'react'; function App() { const [showDiv, setShowDiv] = useState(false); const handleClick = () => { setShowDiv(true); } return ( <div> <button onClick={handleClick}>添加div</button> {showDiv && <div>这是一个新的div</div>} </div> ); } export default App; ``` 在这个例子中,我们使用useState来创建一个名为showDiv的状态变量,并将其默认值设置为false。当用户点击按钮时,我们调用handleClick函数来更新showDiv的值为true。然后,我们使用showDiv的值来决定是否渲染一个新的div元素。如果showDiv为true,那么我们将显示一个新的div元素。 ### 回答2: 在 React 中,要实现点击按钮添加一个 `<div>` 的功能,可以按照以下步骤进行: 首先,在组件的 `state` 中设置一个变量,用于表示是否需要显示这个 `<div>`。例如,将其命名为 `showDiv`,默认值设为 `false`。 然后,在组件的 `render` 方法中,根据 `showDiv` 的值,决定是否渲染这个 `<div>`。可以使用条件渲染的方式,在 `<div>` 的外部使用 `if` 语句或三元运算符进行判断。 接下来,处理点击按钮的事件。在组件中定义一个函数,例如 `handleButtonClick`,用于处理按钮点击事件。在这个函数中,通过调用 `setState` 方法来更新 `showDiv` 的值为 `true`。 最后,在 JSX 代码中,使用 `<button>` 元素作为按钮,并将 `handleButtonClick` 函数作为其 `onClick` 属性的值。这样,当点击按钮时,`handleButtonClick` 函数会被调用,从而更新 `showDiv` 的值为 `true`,触发重新渲染,进而显示这个 `<div>`。 结合以上步骤,就能够实现点击按钮添加一个 `<div>` 的功能了。在这个过程中,通过改变 `state` 的值,从而触发组件的重新渲染,达到动态添加 `<div>` 的效果。 ### 回答3: React是一个用于构建用户界面的JavaScript库。要实现点击按钮添加一个div的功能,需要先创建一个React组件,并在组件的state中保存一个用于判断是否显示div的变量。然后在按钮的点击事件中修改这个变量的值,达到添加div的效果。 首先,在React中创建一个叫做AddDivButton的组件,并在组件的构造函数中初始化state。代码如下: ```javascript import React from 'react'; class AddDivButton extends React.Component { constructor(props) { super(props); this.state = { showDiv: false }; } handleClick = () => { this.setState({ showDiv: !this.state.showDiv }); } render() { return ( <div> <button onClick={this.handleClick}>点击按钮</button> {this.state.showDiv && <div>要添加的div</div>} </div> ); } } export default AddDivButton; ``` 在上面的代码中,通过`setState`方法改变`showDiv`变量的值,当`showDiv`为`true`时渲染要添加的div。 然后,在需要使用这个组件的地方,将它引入并渲染到页面上,如下所示: ```javascript import React from 'react'; import AddDivButton from './AddDivButton'; class App extends React.Component { render() { return ( <div> <AddDivButton /> </div> ); } } export default App; ``` 通过以上代码,当用户点击按钮时,就会添加一个div到页面中。 注意,以上只是一个简单的示例,实际开发中可能会有更多的逻辑和样式处理。希望能帮到你!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值