ReactJS:This.props.toggleModal 不是函数

Posted

技术标签:

【中文标题】ReactJS:This.props.toggleModal 不是函数【英文标题】:ReactJS: This.props.toggleModal is not a function 【发布时间】:2018-07-31 20:32:42 【问题描述】:

我正在尝试从孩子访问父方法以在屏幕上显示模式,但出现错误:This.props.toggleModal is not a function。我正在将该方法传递给孩子,以便可以调用它并使用正确的状态(我认为)。该按钮确实调用了它自己的方法,该方法又调用了父级。模态组件位于 App.js 中。

App.js

class App extends Component 
  constructor() 
  super()
this.state = 
    isOpen: false
 

toggleModal = () => 
this.setState(
  isOpen: !this.state.isOpen
);
console.log('Open');

render() 
return (
  <div className="App">
    <Modal toggleModal=this.toggleModal show=this.state.isOpen
          onClose=this.toggleModal>
          Here's some content for the modal
    </Modal>
    <div className="container">
      <Header/>
      <main>
        <Route path="/users"
           children=( match, ...rest ) => (
             <TransitionGroup component=firstChild>
               match && <UserList ...rest />
             </TransitionGroup>
        )/>
        ...
      </main>
      <Footer />
    </div>
  </div>
);


SearchBar.js -(位于用户页面内)

class SearchBar extends Component 
constructor(props) 
super(props)
this.state = 
  type: this.props.type,
  value: ''
;

componentWillReceiveProps(nextProps) 
if (nextProps.type !== this.props.type) 
  this.setState( type: nextProps.type );

;
handleClick = (e) => 
e.preventDefault();
console.log("Clicked!!!");
this.props.toggleModal();
;
handleChange = e => 
  console.log(this.state.type);
  this.setState( value: e.target.value );
;

render () 
const isUser = this.state.type;
let rightContent = null;
if (isUser === "tour" || isUser === "venue") 
rightContent =
<div className="column">
  <div className="float-right"><button className="add-new" onClick=this.handleClick>Add New</button></div>
</div>
 else 
rightContent =
<div className="column">
    <div className="float-right">
      <div className="results-block">
        <b>0</b>/<small>292</small>
      </div>
    </div>
  </div>

return (
<div className="row main-search">
  <div className="column">
      <form action="">
        <fieldset>
          <label htmlFor="search">
            <input type="text"
                placeholder="Start typing..."
                id="search-box"
                onChange=this.handleChange
                value=this.state.value />
          </label>
        </fieldset>
      </form>
  </div>
  rightContent
</div>
)



export default SearchBar;

【问题讨论】:

我没有看到你在 App.js 中使用 SearchBar 组件,你能解释一下你在哪里使用过 SearchBar 吗? 【参考方案1】:

检查您是否在用户页面组件中将 toggleModal 作为道具。如果是,则将其明确传递给 SearchBar

<SearchBar toggleModal = this.props.toggleModal  /> // plus your rest of the props

【讨论】:

差不多了! toggleModal=this.toggleModal 然后从我有this.props.toggleModal(); 的searchBar 组件单击方法中,谢谢。 干杯好友:D【参考方案2】:

您必须在构造函数中将toggleModal与this绑定,以便将其用作this.toggleModal。 例

this.toggleModal = this.toggleModal.bind(this);

查看这个 ReactJs 文档了解更多信息。 https://reactjs.org/docs/handling-events.html

【讨论】:

这对于他上面给出的类中的箭头函数来说不是必需的。 他的toggleModal已经使用了箭头功能,我相信这不是问题 你的代码看起来没问题,所以我会根据你的错误信息猜测,你将“this”输入到“This”中(尝试检查这个错误)

以上是关于ReactJS:This.props.toggleModal 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Reactjs - 如何在 reactjs 材料表中加载和映射数据

ReactJS学习笔记-深入理解ReactJS的面向组件即对象

ReactJS学习笔记-深入理解ReactJS的面向组件即对象

源码ReactJS-AdminLTE:原始AdminLTE仪表板的ReactJS版本

ReactJs入门

设置 ReactJs 时出错