相关疑难解决方法(0)

如何将道具传递给{this.props.children}

我正在尝试找到正确的方法来定义一些可以通用方式使用的组件:

<Parent>
  <Child value="1">
  <Child value="2">
</Parent>
Run Code Online (Sandbox Code Playgroud)

当然,父级和子级组件之间的渲染有一个逻辑,你可以想象<select><option>作为这种逻辑的一个例子.

对于问题,这是一个虚拟实现:

var Parent = React.createClass({
  doSomething: function(value) {
  },
  render: function() {
    return (<div>{this.props.children}</div>);
  }
});

var Child = React.createClass({
  onClick: function() {
    this.props.doSomething(this.props.value); // doSomething is undefined
  },
  render: function() {
    return (<div onClick={this.onClick}></div>);
  }
});
Run Code Online (Sandbox Code Playgroud)

问题是每当你{this.props.children}用来定义包装器组件时,如何将一些属性传递给它的所有子组件?

javascript reactjs react-jsx

803
推荐指数
19
解决办法
37万
查看次数

React - 将表单元素状态传递给兄弟/父元素的正确方法?

  • 假设我有一个React类P,它呈现两个子类C1和C2.
  • C1包含一个输入字段.我将此输入字段称为Foo.
  • 我的目标是让C2对Foo的变化作出反应.

我想出了两个解决方案,但他们都没有感觉到.

第一解决方案

  1. 分配P状态,state.input.
  2. onChange在P中创建一个函数,它接收一个事件并设置state.input.
  3. 将此传递onChange给C1作为a props,让C1绑定this.props.onChangeonChangeFoo.

这有效.每当Foo的值改变时,它会触发一个setStateP,所以P将输入传递给C2.

但由于同样的原因,它感觉不太正确:我正在从子元素设置父元素的状态.这似乎背叛了React的设计原则:单向数据流.
这是我应该怎么做的,还是有更多的React-natural解决方案?

二解决方案:

把Foo放在P.

但是,当我构建我的应用程序时,我应该遵循这个设计原则 - 将所有表单元素放入render最高级别的类中吗?

就像在我的例子中,如果我有一个大的C1渲染,我真的不想把整个renderC1放到renderP只是因为C1有一个表单元素.

我该怎么办?

reactjs

175
推荐指数
5
解决办法
12万
查看次数

反应,如何从父母访问孩子的状态?无需更新父级状态

嗨,我对React很新,并且非常难以绕过整个状态管理并通过状态和道具传递数据.我确实理解标准的反应方式是以单向方式传递数据 - 从父节点到子节点,我已经为所有其他组件这样做了.但我有一个名为Book的组件,它根据用户选择形式'read,wantToRead,currentReading和none'改变其"shelf"状态.在我的BookList组件中呈现Book组件,但它需要能够读取Book的架子状态并在名为'read,wantToRead,currentReading和none'的部分下呈现正确的书籍.而且由于在这种情况下,Book组件是从BookList组件呈现的,而BookList是父组件,我真的无法理解如何启用BookList来访问Book的状态?BookList组件:

import React, { Component } from 'react'
import { Link } from 'react-router-dom'

import Book from './Book'

class BookList extends Component {
  render(){
    const { books, shelf } = this.props


    return (
    <div className="list-books">
      <div className="list-books-content">
        <div className="list-books-title">
          <h1>MyReads</h1>
        </div>

        <div className="bookshelf">
          <h2 className="bookshelf-title">None</h2>
          {books.map((book)=> {
            console.log(book)
            if (shelf === ''){
              return <div className="bookshelf-books">
                    {/* <BookStateless book= {book} /> */}
                    <Book book = {book} />
                      {/* <BookStateless book= {book} /> */}
                    </div>

            }
          })}
        </div>


        <div className="bookshelf"> …
Run Code Online (Sandbox Code Playgroud)

javascript state reactjs

7
推荐指数
1
解决办法
2万
查看次数

在构造函数中动态创建 Ref

我想让我的子组件有一个 ref,但我不希望用户在创建组件时必须指定 ref。所以说我有这样的事情:

<Parent>
    <Child />
    <Child />
</Parent>
Run Code Online (Sandbox Code Playgroud)

我希望父组件能够访问子组件的状态。简单的方法是为每个组件添加一个 ref,但我希望这是在constructor()函数期间完成的事情,以将其从最终用户中抽象出来,因为我希望这些组件被通用化。

是否有一种干净的方法可以使父组件可以访问子组件的状态,例如在创建子组件时您有类似的东西:

class Child extends Component {
    constructor(){
        super();
        this.state = {'abc': 123}
        this.ref=Math.random();
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,在 Parent 类中,我可以执行以下操作:

 class Parent extends Component {
     componentWillMount(){
         console.log(this.refs);
     }
 }
Run Code Online (Sandbox Code Playgroud)

所以我希望能够声明一组组件,例如:

class App extends Component {
    render(){
       <Parent> <Child /> <Child /> </Parent>
    }
}
Run Code Online (Sandbox Code Playgroud)

这样我就可以访问每个子组件,并且在父组件遍历子组件时它的状态。

reactjs

3
推荐指数
1
解决办法
9347
查看次数

在反应中从父组件访问子组件的子状态

我想<Child2>从父组件访问状态。

<Parent>
   <Child1>
      <Child2>
   </Child1>
</Parent>
Run Code Online (Sandbox Code Playgroud)

如何实现?

reactjs redux

3
推荐指数
1
解决办法
1万
查看次数

标签 统计

reactjs ×5

javascript ×2

react-jsx ×1

redux ×1

state ×1