第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

onChange 和 setState 在我的代碼中不能一起工作

onChange 和 setState 在我的代碼中不能一起工作

慕田峪4524236 2021-06-22 17:13:01
我正在嘗試構(gòu)建一個搜索框。但是,當我想在輸入內(nèi)容時設(shè)置狀態(tài)時,該框只是不允許我輸入任何內(nèi)容。這是調(diào)用搜索框組件的類export default class Tagsearch extends Component {  constructor(props) {    super(props);    this.state = {      hitsDisplay:false,      inputContent:"",      tags:[]    };  }  openDisplay = () => {    console.log("open")    // this.setState({ hitsDisplay: true })  }  closeDisplay = () => {    console.log("close")    // this.setState({ hitsDisplay: false })  }  render() {    let inputTags = (      this.state.tags.map((tag, i) =>         <li key={i} style={styles.items}>          {tag}          <button onClick={() => this.handleRemoveItem(i)}>            (x)          </button>        </li>      )    )    let result = (      <div className="container-fluid" id="results">      </div>    )    if (this.state.hitsDisplay) {      result = (        <div className="container-fluid" id="results">          <div className="rows">            <MyHits handleSelect={this.handleSelect}/>          </div>          <div className="rows">            <Pagination />          </div>        </div>      )    }    return (      <InstantSearch        appId="*******"        apiKey="***********************"        indexName="tags"      >        {inputTags}        <SearchBox            connectSearchBox={connectSearchBox}          openDisplay={this.openDisplay}          closeDisplay={this.closeDisplay}        />        {result}      </InstantSearch>    )  }}下面是搜索框組件const SearchBox = props => {  let {     connectSearchBox,    openDisplay,    closeDisplay  } = props;  const CustomSearchBox = connectSearchBox(({ currentRefinement, refine }) => {    const handleChange = (e, refine) => {      refine(e.target.value)      // console.log(e.target.value)      if (e.target.value !== "") {        openDisplay();      } else {        closeDisplay();      }    }如果我在 open & closeDisplay 中評論兩個 setState,它工作正常,它會相應地打印出打開和關(guān)閉。但是,一旦我啟用了 setState,輸入框就不允許我輸入任何內(nèi)容。
查看完整描述

1 回答

?
紅糖糍粑

TA貢獻1815條經(jīng)驗 獲得超6個贊

你的代碼寫錯了。connectSearchBox旨在將組件連接到 Algolia api。這是對組件定義的一次性設(shè)置。它返回一個高階組件,該組件使用 api 功能包裝給定組件。您可以在此處查看源代碼。通過將您的自定義 SearchBox 放在 SearchBox 函數(shù)中,您會導致組件在每個 render() 循環(huán)中重新構(gòu)建和重新連接,從而不會保留狀態(tài)。這就是為什么一旦您setState的搜索文本消失。


import { connectSearchBox } from 'react-instantsearch-dom';


const CustomSearchBox = ({ currentRefinement, refine, openDisplay, closeDisplay, ...props }) => {

    const handleChange = (e, refine) => {

      refine(e.target.value)

      if (e.target.value !== "")

        openDisplay();

      else

        closeDisplay();

    }


    return (

      <label>

        <ul style={styles.container}>

          <input

            style={styles.input}

            type="text"

            value={currentRefinement}

            onChange={e => handleChange(e, refine)}

          />

        </ul>

      </label>

    )

  })


export default connectSearchBox(CustomSearchBox);

用法


import CustomSearchBox from './CustomSearchBox'

...

       <CustomSearchBox  

          openDisplay={this.openDisplay}

          closeDisplay={this.closeDisplay}

        />

文檔中的用法示例。我認為您想要實現(xiàn)的是將 props 傳遞給您的組件,但connectSearchBox已經(jīng)保證您傳遞給 HOC 的任何 props 也會傳遞到您的自定義搜索框。


查看完整回答
反對 回復 2021-06-24
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號