添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

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

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

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

var React = require('React');
var MyOwnInput = React.createClass({
    render: function () {
        return (
                <input type="text" onChange={this.changeValue} value={this.getValue()} name={this.props.name}/>
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" : ""} />

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

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

显然,对于某些属性,如果您传递给它的值不真实,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行。

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

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

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

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

var inputProps = {
  value: 'foo',
  onChange: this.handleChange
if (condition) inputProps.disabled = true;

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

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

这是通过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

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

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

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

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

或其内联版本

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

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

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

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

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

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

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

在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> 
如果满足特定条件,是否有办法仅将属性添加到R​​eact组件? 我应该在渲染后基于ajax调用将required和readOnly属性添加到表单元素中,但是由于readOnly =“ fal
import {Button, Form, Input, Space} from "antd"; import React from "react"; import {MinusCircleOutlined, PlusOutlined} from '@ant-design/icons'; export default class Test extends React.Component{ state = { formArr: [] formRefMethods = React.
const {contactpenlist} = this.state //添加联系人列表 const contactlist = contactpenlist.map((elem,index)=>( <Card title ='联系人' k... 在上面的例子中,我们定义了一个 `MyComponent` 组件,它接收一个 `text` 属性和一个 `...props` 对象,我们使用 spread operator 把 `props` 对象中的所有属性都传递给了 `div` 组件。然后在 `App` 组件中,我们定义了一个 `myProps` 对象,它包含了一个 `style` 属性和一个 `onClick` 方法,然后我们使用 spread operator 把 `myProps` 对象中的所有属性都传递给了 `MyComponent` 组件。这样,`MyComponent` 组件动态地获得了 `style` 和 `onClick` 这两个属性restore () { filepath="$@" last_commit=$(git log --all --full-history -- $filepath | grep commit | head -1 | awk '{print $2; exit}') echo "Restoring file from commit before $last_commit" git checkout $last_commit^ -- $filepath restore my/file_path 这个好,快捷解决了我的问题。 注意路径:my/file_path,是文件距离 项目根目录的 相对路径 通过HTTPS使用HttpClient信任所有证书 Alan_刘志强: 佩服博主,我是第一次见到这种编目方式。。。。 完美解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题 sanqima: 需要把exe改成Relese版本,若exe是32位,则安装vc_redist.x86.exe,若exe是64位,则安装vc_redist.x64.exe。 完美解决api-ms-win-crt-runtime-l1-1-0.dll 丢失问题 dzy198239: 遇到了这个问题,看了您的文章,解决了这个问题,非常感谢