React - 如何将变量分配给另一个组件类中的输入值? [复制]

Posted

技术标签:

【中文标题】React - 如何将变量分配给另一个组件类中的输入值? [复制]【英文标题】:React - How do I assign a variable to the input value in another Component's class? [duplicate] 【发布时间】:2019-02-24 04:40:03 【问题描述】:

我目前正在使用 React 创建一个损坏计算器应用程序。我才刚开始,所以请多多包涵。

这是我获取“Atk”输入值的代码。这目前在我的名为“CalculatorItems”的组件中:

class Atk extends Component 
constructor(props) 
    super(props);

    this.state = stats: ''



render() 
    return (
        <div>
            <label>PHY/MAG ATK</label><br/>
            <input  value=this.state.stats
                    onChange=event => this.setState(stats: event.target.value)
                    type="number"
            />
            <br/><br/>
        </div>
    )

现在我创建了一个函数,只要单击“计算损坏”按钮就可以调用该函数。在此函数中,我需要将变量“A”分配给上述“Atk”的输入值。这是在名为“计算器”的父组件中。

const damageCalc = () => 
        let A = (Class Atk's input value).

我的问题是我应该在括号中写什么,以便我可以将变量 A 分配给 Atk 的输入值/状态?行得通吗?

请记住,这是在另一个组件中,因为我需要将该函数应用于 CalculatorButton 的 onClick(CalculatorButton 是另一个子组件)。

【问题讨论】:

stats 状态提升到父级,让子级通过处理函数更新此值。 【参考方案1】:

这种情况下的常见做法是将回调函数从父级传递给子级。 在子元素上单击您触发该方法(从子元素)并将一些值作为参数传递(给父元素) 比你在父级中有回调实现,并且可以对值做任何你想做的事情。

如今,人们使用 Redux 或 Mobx 等状态管理器来处理(原文如此!)组件/应用程序的状态管理。但是正如您所说,您才刚刚开始,可能还有一段时间,直到您将状态管理器实施到您的项目中:)

查看此链接:

Child to parent communication in React (JSX) without flux

【讨论】:

【参考方案2】:

您要么需要将 Atk 中的状态作为 props 传递给另一个组件,要么需要将状态提升到更高的组件,该组件可以将其传递给使用damageCalc 函数的任何组件。如果您选择后者,您会将 onChange 处理程序向下传递给 Atk。

【讨论】:

【参考方案3】:

最常见的方法是给你的子组件添加一个回调属性,这样它就可以通知组件它的数据已经改变了。然后父组件可以用子组件的状态更新its状态。

例如,在您的Atk 组件中:

class Atk extends Component 
  constructor() 
    this.state =  stats: '' 
  

  render() 
    return (
      <div>
        <label>PHY/MAG ATK</label><br/>
        <input  value=this.state.stats
                onChange=event => 
                  const stats = event.target.value;
                  this.setState( stats );
                  this.props.onValueChange(parseInt(stats, 10));
                
                type="number"
        />
        <br/><br/>
      </div>
    )
  

...在父级中:

class DamageCalculator extends Component 
  constructor() 
    super();
    this.state =  atk: null ;
  

  calculateDmg() 
    return this.state.atk * foo; // or whatever the calculation is
  

  render() 
    return (
      <div>
        <Atk onValueChange= atk => this.setState( atk ) />
      </div>
    );
  

【讨论】:

谢谢,有道理。我重新编辑了我的代码,但是现在每当我启动页面时,calculateDmg() 都会运行。我希望它仅在单击计算损坏按钮时运行。我将如何做到这一点? 我建议单独提问,因为它与第一个问题无关。祝你好运!【参考方案4】:

从子组件取回数据在 React 中并不常见。一般来说,我们将状态保存在父节点中,然后让子节点更新它。因此,将 state 属性和处理程序函数发送到您的子组件,然后通过此处理程序进行更新。因此,您的子组件可以是无状态的哑组件。使用此方法,您可以与许多子组件共享此状态。

class App extends React.Component 
  state = 
    stats: "",
  ;

  handleCange = e => this.setState(  stats: e.target.value  );
  damageCalc = () => console.log( this.state.stats );

  render() 
    return (
      <div>
        <Atk onChange=this.handleCange stats=this.state.stats />
        <CalculatorButton onClick=this.damageCalc />
      </div>
    );
  


const Atk = ( props ) => 
  const  stats, onChange  = props;
  return (
    <div>
      <label>PHY/MAG ATK</label><br />
      <input
        value=stats
        onChange=onChange
        type="number"
      />
      <br /><br />
    </div>
  );
;

const CalculatorButton = props => (
  <button onClick=props.onClick>Click</button>
);

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>

【讨论】:

以上是关于React - 如何将变量分配给另一个组件类中的输入值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

ios 将 self 分配给另一个类中的属性

如何将一个道具作为变量传递给 React 中的另一个道具?

将变量传递给另一个 JAVA 类中的主函数

React 如何将状态传递给另一个组件

如何将类成员变量传递给另一个组件角度?

如何将数组的变量分配给另一个数组